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

如何在Mailgun中设置自定义消息ID?含PHP/Webhook场景问询

如何在Mailgun发送的邮件中设置自定义消息ID并确保Webhook返回它

嘿,我之前刚好折腾过这个需求,来给你一步步讲清楚:

一、通用设置逻辑

Mailgun支持通过自定义邮件头部来设置消息ID,但有个关键要求:你的自定义ID必须符合RFC 5322标准,也就是得是本地标识@你的域名的格式(比如order-12345@your-sending-domain.com)。如果格式不对,Mailgun会直接忽略你的自定义值,继续用它生成的默认消息ID。

二、PHP具体实现方法

不管你用Mailgun的官方SDK还是直接发API请求,都能轻松加上这个自定义头部:

1. 使用Mailgun官方SDK(v3版本)

这是最推荐的方式,代码简洁且不易出错:

use Mailgun\Mailgun;

// 初始化Mailgun客户端
$mgClient = Mailgun::create('你的API密钥');
$sendDomain = '你的发送域名(比如mg.yourdomain.com)';

// 发送邮件并设置自定义Message-ID
$mgClient->messages()->send($sendDomain, [
    'from'    => '你的发件人 <sender@yourdomain.com>',
    'to'      => '收件人 <recipient@example.com>',
    'subject' => '带自定义消息ID的测试邮件',
    'text'    => '这封邮件使用了我们自己定义的Message-ID!',
    'h:Message-ID' => 'order-12345@your-sending-domain.com' // 核心:自定义消息ID
]);

2. 直接用cURL发送API请求

如果不想依赖SDK,也可以直接发cURL请求:

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.mailgun.net/v3/你的发送域名/messages',
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => 'api:你的API密钥',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'from' => '你的发件人 <sender@yourdomain.com>',
        'to' => '收件人 <recipient@example.com>',
        'subject' => 'cURL发送的自定义Message-ID测试邮件',
        'text' => '通过cURL设置自定义Message-ID成功!',
        'h:Message-ID' => 'invoice-67890@your-sending-domain.com'
    ]
]);

$response = curl_exec($curl);
curl_close($curl);

三、确保Webhook返回自定义消息ID

只要你的自定义Message-ID格式合法,Mailgun的所有Webhook事件(比如delivered、opened、failed等)的Payload里,都会直接包含这个message-id字段,不需要额外配置!

注意事项

  • 自定义ID必须全局唯一,否则会导致邮件追踪数据混乱
  • 一定要带@域名部分,纯字符串(比如order-12345)会被Mailgun忽略
  • 头部键名h:Message-ID的大小写要严格对应,写错的话不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:10