使用Laravel的Mailgun驱动程序,您如何(优雅地)使用您的电子邮件发送自定义数据和标签?

问题描述 投票:11回答:4

所以我正在使用Laravel 5.1并尝试与Mailgun集成。嗯,这很容易,但现在我正在尝试从我的应用程序发送custom variables以及我的电子邮件。

我实际上是因为他们的“新方向”而从Mandrill转换我们的应用程序。有了它们,我可以通过电子邮件标题提供变量和标签,但使用Mailgun,只有在通过SMTP发送时才有效。在Laravel中,Mail::send()使用API​​调用,所以理论上我会用"v:my-custom-data" => "{"this_id": 123}"添加元数据,但我想避免改变那样的核心类。

我也考虑使用Bogardo/Mailgun,但后来我必须用Mail::send()替换所有Mailgun::send()s,然后我无法在本地发送电子邮件(基于环境的电子邮件驱动程序),然后应用程序将与Mailgun“结婚”。

有人这么做过吗?如果我不清楚,请告诉我。

api laravel-5 email-integration mailgun
4个回答
26
投票

我解决了自己的问题。我错了,你可以通过SMTP方法添加自定义变量:

// Send email with custom variables and tags in Laravel
Mail::send('emails.blank',
    ['html' => 'This is a test of Mailgun. <strong>How did it work out?</strong>'],
    function($message) {
        $message->to('[email protected]');
        $message->subject('Mailgun API Test');

        $headers = $message->getHeaders();
        $headers->addTextHeader('X-Mailgun-Variables', '{"msg_id": "666", "my_campaign_id": 1313}');
        $headers->addTextHeader('X-Mailgun-Tag', 'test-tag');
    });

我的测试还不够。很高兴知道,但我认为这是一个无证的功能,所以我建议谨慎使用。


3
投票

你可以在Laravel 5中这样做:

Mail::send(['text' => 'my_template'], $data, function ($message) {
  ..
  $message->getSwiftMessage()->getHeaders()->addTextHeader('X-Mailgun-Tag', 'my-tag');
});

2
投票

Laravel 5.4+的更新

正如你可以在offical docs中读到:

withSwiftMessage基类的Mailable方法允许您注册一个回调,该回调将在发送消息之前使用原始SwiftMailer消息实例调用。这使您有机会在邮件传递之前自定义邮件:

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    $this->view('emails.orders.shipped');

    $this->withSwiftMessage(function ($message) {
        $message->getHeaders()
                ->addTextHeader('Custom-Header', 'HeaderValue');
    });
}

1
投票

Laravel实施的Mailgun驱动程序不支持选项/参数。

这是一个Gist,它增加了对本机驱动程序的支持:https://gist.github.com/j0um/27df29e165a1c1e0634a8dee2122db99

© www.soinside.com 2019 - 2024. All rights reserved.