Adding headers to email sent as a Laravel Notification

不羁的心 提交于 2020-11-29 05:53:33

问题


Someone knows how to add headers to emails sent through Laravel Notification System?

I am not talking about Mailable classes where I can set header through the withSwiftMessage() method!

I also would like to keep using the MailMessage once I have a lot of emails built using the line, greetings methods!

Any one has any clue?

There is my code in case somebody needs to see anything!

<?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');
    }
}

Thanks in advance!


回答1:


Actually I've found 2 ways to append headers.

When the notification is sent via mail channel an Illuminate\Mail\Events\MessageSending event is fired.

Append a listener to it. In handle() you will get the Swift_Message object.

Or in the AppServiceProvider's register() method override the MailChannel with your own and append the header in the send() method.

$this->app->bind(
    \Illuminate\Notifications\Channels\MailChannel::class,
    MyMailChannel::class
);



回答2:


In ./app/Notifications/myNotification.php, add this code in your __construct() function:

$this->callbacks[]=( function($message){
    $message->getHeaders()->addTextHeader('x-mailgun-native-send', 'true');
});

Replace the "x-mailgun-native-send" with any header you wish to add, and 'true' with the desired value.

See https://github.com/laravel/ideas/issues/475




回答3:


Debbie V has a pretty close answer but not quite right. The issue she is referencing makes it clear, but she missed the necessary context that solution provided.

By default a Notification in Laravel uses MailMessage, however you can also have it return a Mailable instead. Only if you: a) create a custom mailable, and b) use that instead of MailMessage will the callbacks be applied.

A more complete solution would be:

  1. Create a custom mailable class php artisan make:mail MyMailable
  2. Update your public function toMail($notifiable) method to utilize a the new Mailable.
  3. Add the callbacks to the constructor of your MyMailable class.

And after that you should be all good. The hardest part of this is just adapting the current MailMessage you use to fit the API of a Mailable.



来源:https://stackoverflow.com/questions/43505260/adding-headers-to-email-sent-as-a-laravel-notification

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!