将 headers 添加到作为 Laravel 通知发送的电子邮件
Adding headers to email sent as a Laravel Notification
有人知道如何在通过 Laravel Notification System 发送的电子邮件中添加 header 吗?
我说的不是Mailable 类 我可以通过withSwiftMessage()
方法设置header!
一旦我有大量使用 line
、greetings
方法构建的电子邮件,我也想继续使用 MailMessage
!
有人知道吗?
这里有我的代码,以防有人需要查看任何内容!
<?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');
}
}
提前致谢!
实际上我找到了 2 种附加 headers 的方法。
当通过邮件通道发送通知时,会触发 Illuminate\Mail\Events\MessageSending
事件。
为其添加一个监听器。在 handle()
你会得到 Swift_Message
object.
或者在 AppServiceProvider
的 register()
方法中用您自己的覆盖 MailChannel
并在 send()
方法中附加 header。
$this->app->bind(
\Illuminate\Notifications\Channels\MailChannel::class,
MyMailChannel::class
);
在 ./app/Notifications/myNotification.php 中,将此代码添加到您的 __construct() 函数中:
$this->callbacks[]=( function($message){
$message->getHeaders()->addTextHeader('x-mailgun-native-send', 'true');
});
将 "x-mailgun-native-send" 替换为您要添加的任何 header,
和 'true' 具有所需的值。
Debbie V 的答案很接近,但不太正确。她引用的问题很清楚,但她错过了解决方案提供的必要上下文。
默认情况下,Laravel 中的通知使用 MailMessage
,但您也可以将其 return 改为 Mailable
。仅当您:a) 创建自定义可邮寄邮件,并且 b) 使用它而不是 MailMessage
时才会应用回调。
更完整的解决方案是:
- 创建自定义可邮寄 class
php artisan make:mail MyMailable
- 更新您的
public function toMail($notifiable)
方法以利用新的 Mailable
。
- 将回调添加到
MyMailable
class. 的构造函数
然后你应该一切都好。最难的部分是调整当前使用的 MailMessage
以适应 Mailable
.
的 API
如果上述方法不起作用,这里有一个现代的 2022 替代方案,已在 Laravel 8 中测试。
使用withSwiftMessage()
public function toMail($notifiable)
{
return (new MailMessage)
->subject($subject)
->greeting($greeting)
->line($line1)
->line($line2)
->withSwiftMessage(function($message) use ($value1, $value2) {
$message->getHeaders()->addTextHeader('X-MJ-CustomID', json_encode([
'key1' => $value1,
'key2' => $value2,
]));
})
}
有人知道如何在通过 Laravel Notification System 发送的电子邮件中添加 header 吗?
我说的不是Mailable 类 我可以通过withSwiftMessage()
方法设置header!
一旦我有大量使用 line
、greetings
方法构建的电子邮件,我也想继续使用 MailMessage
!
有人知道吗?
这里有我的代码,以防有人需要查看任何内容!
<?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');
}
}
提前致谢!
实际上我找到了 2 种附加 headers 的方法。
当通过邮件通道发送通知时,会触发 Illuminate\Mail\Events\MessageSending
事件。
为其添加一个监听器。在 handle()
你会得到 Swift_Message
object.
或者在 AppServiceProvider
的 register()
方法中用您自己的覆盖 MailChannel
并在 send()
方法中附加 header。
$this->app->bind(
\Illuminate\Notifications\Channels\MailChannel::class,
MyMailChannel::class
);
在 ./app/Notifications/myNotification.php 中,将此代码添加到您的 __construct() 函数中:
$this->callbacks[]=( function($message){
$message->getHeaders()->addTextHeader('x-mailgun-native-send', 'true');
});
将 "x-mailgun-native-send" 替换为您要添加的任何 header, 和 'true' 具有所需的值。
Debbie V 的答案很接近,但不太正确。她引用的问题很清楚,但她错过了解决方案提供的必要上下文。
默认情况下,Laravel 中的通知使用 MailMessage
,但您也可以将其 return 改为 Mailable
。仅当您:a) 创建自定义可邮寄邮件,并且 b) 使用它而不是 MailMessage
时才会应用回调。
更完整的解决方案是:
- 创建自定义可邮寄 class
php artisan make:mail MyMailable
- 更新您的
public function toMail($notifiable)
方法以利用新的Mailable
。 - 将回调添加到
MyMailable
class. 的构造函数
然后你应该一切都好。最难的部分是调整当前使用的 MailMessage
以适应 Mailable
.
如果上述方法不起作用,这里有一个现代的 2022 替代方案,已在 Laravel 8 中测试。
使用withSwiftMessage()
public function toMail($notifiable)
{
return (new MailMessage)
->subject($subject)
->greeting($greeting)
->line($line1)
->line($line2)
->withSwiftMessage(function($message) use ($value1, $value2) {
$message->getHeaders()->addTextHeader('X-MJ-CustomID', json_encode([
'key1' => $value1,
'key2' => $value2,
]));
})
}