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

时间:2019-01-08 13:59:10

标签: php laravel amazon-web-services amazon-sns amazon-ses

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

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

此刻,我正在通过SES使用Laravel Mail类,它正在工作,但没有通知。

有没有办法做到这一点?还是我必须始终使用SesClient来分配ConfigurationSetName

1 个答案:

答案 0 :(得分:1)

根据AWS Documentation,您可以在电子邮件上指定X-SES-CONFIGURATION-SET标头。

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

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

如果要将此标头添加到所有电子邮件中,还可以听Illuminate\Mail\Events\MessageSending事件,然后从那里添加标头。

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

我也验证了它的作用。