所以我正在使用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“结婚”。
有人这么做过吗?如果我不清楚,请告诉我。
我解决了自己的问题。我错了,你可以通过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');
});
我的测试还不够。很高兴知道,但我认为这是一个无证的功能,所以我建议谨慎使用。
你可以在Laravel 5中这样做:
Mail::send(['text' => 'my_template'], $data, function ($message) {
..
$message->getSwiftMessage()->getHeaders()->addTextHeader('X-Mailgun-Tag', 'my-tag');
});
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');
});
}
Laravel实施的Mailgun驱动程序不支持选项/参数。
这是一个Gist,它增加了对本机驱动程序的支持:https://gist.github.com/j0um/27df29e165a1c1e0634a8dee2122db99