Quelqu'un sait comment ajouter des en-têtes aux e-mails envoyés via le système de notification Laravel?
Je ne parle pas des classes disponibles où je peux définir l'en-tête via la méthode withSwiftMessage()
!
Je voudrais également continuer à utiliser MailMessage
une fois que j'ai beaucoup d'e-mails créés à l'aide des méthodes line
, greetings
!
Quelqu'un a une idée?
Il y a mon code au cas où quelqu'un aurait besoin de voir quoi que ce soit!
<?php
namespace PumpMyLead\Notifications\Tenants\Auth;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class AccountActivation extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('My email subject')
->greeting('Just a greeting')
->line('Line 1')
->line('Line 2')
->action('CTA wanted', 'http://www.pumpmylead.com')
->line('Byebye');
}
}
Merci d'avance!
3 réponses
En fait, j'ai trouvé 2 façons d'ajouter des en-têtes.
Lorsque la notification est envoyée via le canal de messagerie, un événement Illuminate\Mail\Events\MessageSending
est déclenché.
Ajoutez-y un auditeur. Dans handle()
, vous obtiendrez l'objet Swift_Message
.
Ou dans la méthode register()
de AppServiceProvider
, remplacez le MailChannel
par le vôtre et ajoutez l'en-tête dans la méthode send()
.
$this->app->bind(
\Illuminate\Notifications\Channels\MailChannel::class,
MyMailChannel::class
);
Dans ./app/Notifications/myNotification.php, ajoutez ce code dans votre fonction __construct ():
$this->callbacks[]=( function($message){
$message->getHeaders()->addTextHeader('x-mailgun-native-send', 'true');
});
Remplacez "x-mailgun-native-send" par n'importe quel en-tête que vous souhaitez ajouter et "true" par la valeur souhaitée.
Voir https://github.com/laravel/ideas/issues/475
Debbie V a une réponse assez proche mais pas tout à fait juste. Le problème auquel elle fait référence le montre clairement, mais elle a manqué le contexte nécessaire que cette solution apportait.
Par défaut, une notification dans Laravel utilise MailMessage
, mais vous pouvez également lui faire renvoyer un Mailable
à la place. Ce n'est que si vous: a) créez un mailable personnalisé, et b) utilisez-le au lieu de MailMessage
que les rappels seront appliqués.
Une solution plus complète serait:
- Créer une classe disponible personnalisée
php artisan make:mail MyMailable
- Mettez à jour votre méthode
public function toMail($notifiable)
pour utiliser le nouveauMailable
. - Ajoutez les rappels au constructeur de votre classe
MyMailable
.
Et après cela, vous devriez être tout bon. La partie la plus difficile consiste simplement à adapter le MailMessage
actuel que vous utilisez pour l'adapter à l'API d'un Mailable
.
De nouvelles questions
php
PHP est un langage de script largement utilisé, de haut niveau, dynamique, orienté objet et interprété, principalement conçu pour le développement Web côté serveur. Utilisé pour les questions sur le langage PHP.