是否可以在Mail之后在Laravel中获取Mail响应:到一个名为?的方法?哪个地方最好?
Mail::to($order->email)
->send(new ThankYouMail($order->fresh()));
我使用Sendgrid作为Laravel邮件驱动程序,并希望获取messageID,以便用于以后的Sendgrid挂钩(获取电子邮件传递状态等)。
public function build()
{
$from = '[email protected]';
$subject = 'Thank You for Ordering';
$name = 'Name XYZ';
$order_id = (string)$this->order->id;
$headerData = [
'category' => 'Order',
'unique_args' => [
'OrderID' => $order_id
]
];
$header = $this->asString($headerData);
$this->withSwiftMessage(function ($message) use ($header) {
$message->getHeaders()
->addTextHeader('X-SMTPAPI', $header);
});
return $this->view('mails.thank-you')
->from($from, $name)
->replyTo($from, $name)
->subject($subject);
}
更新:2019/06/25
如果有人想获取和存储邮件状态,那么使用Sendgrid Event Webhook是最好的解决方案。
邮件发送Illuminate\Mail\Events\MessageSent
后发送[1]
使用swift消息实例的实例调度此事件。 [2]
您可以收听此事件并获取消息ID。
可以通过在EventServiceProvider
的引导方法中注册事件监听器来订阅此事件。 [3]
protected $listen = [
'Illuminate\Mail\Events\MessageSent' => [
'App\Handlers\Events\MessageIdTranscript',
],
];
MessageIdTranscript
是一个普通的PHP类,带有一个用事件调用的handle
方法。 Swift_Message
的实例通过名为getId
的公共getter方法公开消息Id。
namespace App\Handlers\Events;
use Illuminate\Mail\Events\MessageSent;
class MessageIdTranscript {
/**
* Handle the event.
*
* @param MessageSent $event
* @return void
*/
public function handle(MessageSent $event)
{
$messageId = $event->message->getId();
// continue handling...
}
}
将侦听器附加到sendgrid api响应而不是构建。