使用 Laravel 的 Mailgun 驱动程序,你如何(优雅地)通过电子邮件发送自定义数据和标签?
Posted
技术标签:
【中文标题】使用 Laravel 的 Mailgun 驱动程序,你如何(优雅地)通过电子邮件发送自定义数据和标签?【英文标题】:Using Laravel's Mailgun driver, how do you (gracefully) send custom data and tags with your email? 【发布时间】:2016-06-21 06:29:24 【问题描述】:所以我正在使用 Laravel 5.1 并尝试与 Mailgun 集成。嗯,这很简单,但现在我正尝试从我的应用程序中发送 custom variables 以及我的电子邮件。
实际上,由于 Mandrill 的“新方向”等原因,我正在将我们的应用程序从 Mandrill 切换过来。有了它们,我可以通过电子邮件标头提供变量和标签,但使用 Mailgun,只有在您通过 SMTP 发送时才有效。在 Laravel 中,Mail::send()
使用 API 调用,所以理论上我会使用 "v:my-custom-data" => ""this_id": 123"
添加元数据,但我想避免像那样更改核心类。
我也考虑过使用Bogardo/Mailgun,但是我必须用Mailgun::send()
替换所有Mail::send()
s,然后我无法在本地发送电子邮件(基于环境的电子邮件驱动程序),然后是应用程序将与 Mailgun “结婚”。
以前有人做过吗?如果我在这里不清楚,请告诉我。
【问题讨论】:
【参考方案1】:我解决了自己的问题。我错了,你可以通过 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('jack@mailinator.com');
$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');
);
我的测试不够充分。很高兴知道,但我认为这是一个未记录的功能,所以我建议谨慎使用。
【讨论】:
附带说明,SparkPost 的 API 并非如此,尽管有类似的元数据处理。我最近试过了。【参考方案2】:你可以在 Laravel 5 中这样做:
Mail::send(['text' => 'my_template'], $data, function ($message)
..
$message->getSwiftMessage()->getHeaders()->addTextHeader('X-Mailgun-Tag', 'my-tag');
);
【讨论】:
【参考方案3】:Laravel 5.4+ 更新
正如您在offical docs 中看到的那样:
Mailable
基类的 withSwiftMessage
方法允许您注册一个回调,该回调将在发送消息之前使用原始 SwiftMailer 消息实例调用。这使您有机会在消息传递之前对其进行自定义:
/**
* Build the message.
*
* @return $this
*/
public function build()
$this->view('emails.orders.shipped');
$this->withSwiftMessage(function ($message)
$message->getHeaders()
->addTextHeader('Custom-Header', 'HeaderValue');
);
【讨论】:
【参考方案4】:Mailgun 驱动程序的 Laravel 实现不支持选项/参数。
这是一个 Gist,它增加了对本机驱动程序的支持:https://gist.github.com/j0um/27df29e165a1c1e0634a8dee2122db99
【讨论】:
以上是关于使用 Laravel 的 Mailgun 驱动程序,你如何(优雅地)通过电子邮件发送自定义数据和标签?的主要内容,如果未能解决你的问题,请参考以下文章
Mailgun、Mandrill 和 Ses 驱动程序、SMTP 和 phpmailer,在 Laravel 5.1 中使用哪一个?
使用 Mailgun API 在 Laravel 8 中未发送电子邮件
Laravel 8通过api客户端发送mailgun错误:未经授权的响应:禁止