使用 Laravel Mail class 通过 AWS SES 发送电子邮件

Send email via AWS SES using Laravel Mail class

我正在尝试使用 AWS SES 服务和 Laravel 邮件 class (Illuminate\Support\Facades\Mail) 发送电子邮件。

我想设置为 ConfigurationSetName 以便能够通过 AWS SNS 接收通知。

目前,我正在通过 SES 使用 Laravel 邮件 class,它可以正常工作,但没有通知。

有什么办法吗?或者我是否必须始终使用 SesClient 来分配 ConfigurationSetName?

根据AWS Documentation,可以在邮件中指定X-SES-CONFIGURATION-SETheader

从 Laravel 的角度来看,最简单的方法是指定要直接从 Mailable 发送的 header:

public function build()
{
    $this->markdown('emails.creditcard.added');

    $this->withSwiftMessage(function ($message) {
        $message->getHeaders()
                ->addTextHeader('X-SES-CONFIGURATION-SET', '####');
    });
}

您也可以使用 Mail Facade 来完成它,因为它有一个底层 Swift_Message 实例。例如:

Mail::send('emails.creditcard.added', [], function ($message) use($user) {
    $message->to($user->email)
        ->getSwiftMessage()
        ->getHeaders()
        ->addTextHeader('X-SES-CONFIGURATION-SET', '####');
});

如果您想将此 header 添加到所有电子邮件,您还可以收听 Illuminate\Mail\Events\MessageSending 事件并从那里添加 header。

public function handle(MessageSending $event)
{
    $headers = $event->message->getHeaders();
    $headers->addTextHeader('X-SES-CONFIGURATION-SET', '####');
}

我也验证了它有效。

只想补充@Mozammil 的回答。

如果您想添加多个 headers:

return $this->view('mail-template')
    ->withSwiftMessage(function ($message) {
        $headers = $message->getHeaders();
        $headers->addTextHeader('X-SES-CONFIGURATION-SET', 'my-configuration-set');
        $headers->addTextHeader('ANOTHER-HEADER', 'header-value');
    });