You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel通过Mailgun发送邮件时如何获取唯一ID以跟踪Webhook

获取Laravel发送Mailgun邮件的唯一消息ID用于Webhook追踪

我查看了Mailgun API,发现其发送Webhook时会携带如下唯一ID:

"id": "-laxIqj9QWubsjY_3pTq_g",

这应该是每封邮件的唯一标识。请问在Laravel中使用如下代码发送邮件时,能否在发送时获取该ID,以便对应跟踪收到的Webhook?仅通过收件人邮箱无法满足我的追踪需求。

邮件发送代码:

Mail::send('email.subscription', $data, function ($message) use ($email) { 
    $message->to($email)->subject('Welcome')->from('no-reply@name.com', 'My Name'); 
});

当然可以获取到这个Mailgun的邮件唯一ID!Laravel的Mailgun驱动已经内置了获取该标识的能力,只需要稍微调整你的发送代码就能实现,下面分两种情况说明:

方法一:兼容大部分Laravel版本(包括旧版)

当你调用Mail::send()时,它会返回一个Illuminate\Mail\SentMessage实例,我们可以从这个实例里提取Mailgun返回的消息ID:

// 先把发送结果赋值给变量
$sentMessage = Mail::send('email.subscription', $data, function ($message) use ($email) { 
    $message->to($email)->subject('Welcome')->from('no-reply@name.com', 'My Name'); 
});

// 获取底层的SwiftMailer消息实例
$swiftMessage = $sentMessage->getSwiftMessage();

// 从邮件头里提取Mailgun的消息ID
$mailgunMessageId = $swiftMessage->getHeaders()->get('X-Mailgun-Message-ID')->getValue();

这里的$mailgunMessageId就是和Webhook中id字段完全对应的唯一标识。

方法二:Laravel 9+ 简化写法

如果你使用的是Laravel 9及以上版本,框架对Mailgun的支持更友好,提供了直接获取消息ID的方法:

$sentMessage = Mail::send('email.subscription', $data, function ($message) use ($email) { 
    $message->to($email)->subject('Welcome')->from('no-reply@name.com', 'My Name'); 
});

// 直接获取Mailgun消息ID
$mailgunMessageId = $sentMessage->getMessageId();

拿到这个ID之后,你可以把它和你的业务数据(比如用户ID、订阅记录ID)关联存储到数据库中。当Mailgun的Webhook触发时,只需要用Webhook里的id字段去匹配你存储的ID,就能精准追踪到对应邮件的业务记录,完全解决仅靠收件人邮箱无法区分的问题。

内容的提问来源于stack exchange,提问作者Miljan Rakita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:11