如何在Laravel 5.1中向电子邮件添加标题

geo*_*310 14 php laravel laravel-5

有没有办法在Laravel 5.1中为所有电子邮件添加默认标头?我希望所有电子邮件都使用以下标头发送:

x-mailgun-native-send: true
Run Code Online (Sandbox Code Playgroud)

Max*_*nin 20

Laravel使用SwiftMailer进行邮件发送.

当您使用Mail facade发送电子邮件时,您调用send()方法并定义回调:

\Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Your Reminder!');
});
Run Code Online (Sandbox Code Playgroud)

回调接收$m作为\Illuminate\Mail\Message对象的变量,该变量具有getSwiftMessage()返回\Swift_Message可用于设置标题的对象的方法:

$swiftMessage = $m->getSwiftMessage();

$headers = $swiftMessage->getHeaders();
$headers->addTextHeader('x-mailgun-native-send', 'true');
Run Code Online (Sandbox Code Playgroud)


小智 9

我知道这是一篇旧帖子,但我现在遇到了同样的问题,我认为这对其他人可能有用。

如果您使用的结构与 Laravel(6.x 和 7.x)中所示的结构完全相同,如下所示:

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->from('example@example.com')
                ->view('emails.orders.shipped');
}
Run Code Online (Sandbox Code Playgroud)

您可以按以下格式向电子邮件添加标头:

public function build()
{
   return $this->from('example@example.com')
                ->view('emails.orders.shipped')
                ->withSwiftMessage(function ($message) {
                    $message->getHeaders()
                        ->addTextHeader('Custom-Header', 'HeaderValue');
                });
}
Run Code Online (Sandbox Code Playgroud)

我希望这会有用。

链接到当前文档:https://laravel.com/docs/7.x/mail#customizing-the-swiftmailer-message


Gay*_*yan 7

对@maxim-lanin 的答案稍作修改。就可以这样使用了,流畅。

\Mail::send('email.view', ['user' => $user], function ($message) use ($user) {
    $message->to($user->email, $user->name)
        ->subject('your message')
        ->getSwiftMessage()
        ->getHeaders()
        ->addTextHeader('x-mailgun-native-send', 'true');
});
Run Code Online (Sandbox Code Playgroud)