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!

5
Gustavo Bissolli 19 avril 2017 à 23:13

3 réponses

Meilleure réponse

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
);
7
Attila Fulop 16 oct. 2017 à 09:06

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

0
Debbie V 19 sept. 2018 à 19:42

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:

  1. Créer une classe disponible personnalisée php artisan make:mail MyMailable
  2. Mettez à jour votre méthode public function toMail($notifiable) pour utiliser le nouveau Mailable.
  3. 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.

0
Dan Pock 3 mai 2019 à 15:55