Php 如何将MailgunTransport中创建的Mailgun ID传递给Laravel中的事件侦听器?

Php 如何将MailgunTransport中创建的Mailgun ID传递给Laravel中的事件侦听器?,php,laravel,mailgun,Php,Laravel,Mailgun,在我的Laravel应用程序中,我有一个事件监听器,当某人被添加到课程中时触发,然后向该用户发送电子邮件“您已被添加到课程中” 我正在使用Mailgun发送这些电子邮件,在这个侦听器中,我调用\Mail,它构建了一个刀片文件并将电子邮件发送给用户,这一切都很正常 我的问题是我想存储邮枪ID。在Laravel v6中,它被添加到illumb\Mail\Transport中\MailgunTransport@send我可以通过调用$message->getId()访问该ID,我认为可以在供应商/sw

在我的Laravel应用程序中,我有一个事件监听器,当某人被添加到课程中时触发,然后向该用户发送电子邮件“您已被添加到课程中”

我正在使用Mailgun发送这些电子邮件,在这个侦听器中,我调用
\Mail
,它构建了一个刀片文件并将电子邮件发送给用户,这一切都很正常

我的问题是我想存储邮枪ID。在Laravel v6中,它被添加到
illumb\Mail\Transport中\MailgunTransport@send
我可以通过调用
$message->getId()
访问该ID,我认为可以在
供应商/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php中找到该ID

如何返回
$message->getId()
,以便在侦听器中使用它

在我的侦听器
\Mail
中,我调用我的模型来创建新发送的电子邮件记录,我希望能够存储该ID

以下是我最初提出的问题的链接,我的问题有助于解决问题:


我也回答了你的老问题。我认为你误解了这个过程。下面我将为Laravel6.x创建一个完整的示例,但对于较旧的版本应该是相同的

1。配置邮枪

这是最简单的部分。只需使用mailgun凭据更改
services.php
文件,并记住向composer请求
guzzlehttp/guzzle
包,否则您将无法发送电子邮件。然后更改
.env
文件,并将
MAIL\u驱动程序设置为
mailgun
。通过这种方式,Laravel将知道它必须使用该驱动程序来发送电子邮件

2。创建您的逻辑

假设每次客户创建和订购时,您都必须发送一封电子邮件。您将在代码库中的某个地方有一个
OrderController
,其中包含一个
store
方法,该方法创建订单并立即发送电子邮件。差不多

公共函数存储(请求$Request)
{
//验证您的请求
$this->validate([…]);
//创建订单
$order=新订单();
$order->fill($request->only([…]);
//保存订单
$order->save();
//发送确认邮件;
邮件::发送(auth()->user())->发送(创建新订单($order));
}
由于您设置了mailgun驱动程序,
Mail
facade将自动使用
MailgunTransport

3。创建侦听器

如中所述,在
EventServiceProvider
中设置侦听器。然后,创建侦听器后,您可以按如下方式检索Mailgun ID:

/**
*处理事件。
*
*@param\light\Mail\Events\MessageSent$event
*@返回无效
*/
公共函数句柄(MessageSent$事件)
{
//从消息头中检索mailgun ID
$id=$event->message->getHeaders()->get('X-Mailgun-message-id');
}

再次感谢@ilGala这个例子对我来说更清楚了,我想我明白了让人困惑的原因。我要试一试!