如何在PHP中通过Amazon AWS SES API的sendEmail函数配置List-Unsubscribe头
在PHP中配置AWS SES sendEmail的List-Unsubscribe头
我之前也碰到过类似的问题,其实AWS SES的sendEmail函数是支持添加自定义邮件头的,只是这个配置项容易被忽略。你需要在Message参数里添加Headers数组,专门用来定义这类自定义头信息。
直接给你可行的代码示例吧,你可以对照着修改自己的实现:
// 假设你已经初始化好了AWS SES客户端 $sesClient $sendEmailParams = [ 'Destination' => [ 'ToAddresses' => ['user@example.com'], // 替换成实际收件人 ], 'Message' => [ 'Subject' => [ 'Charset' => 'UTF-8', 'Data' => '你的邮件主题', ], 'Body' => [ 'Html' => [ 'Charset' => 'UTF-8', 'Data' => '<p>这里是HTML邮件内容,记得加上退订链接的提示哦</p>', ], 'Text' => [ 'Charset' => 'UTF-8', 'Data' => '这里是纯文本邮件内容,同样可以加上退订链接', ], ], // 关键部分:添加List-Unsubscribe头 'Headers' => [ [ 'Name' => 'List-Unsubscribe', // 按照RFC标准格式,支持URL和mailto两种方式,用逗号分隔 'Value' => '<http://unsubscribe.link>, <mailto:unsubscribe@yourdomain.com?subject=退订请求>' ] ], ], 'Source' => 'sender@yourdomain.com', // 替换成SES验证过的发件人邮箱 ]; // 调用sendEmail发送邮件 try { $result = $sesClient->sendEmail($sendEmailParams); echo "邮件发送成功,Message ID: " . $result['MessageId']; } catch (Exception $e) { echo "发送失败: " . $e->getMessage(); }
这里有几个需要注意的细节:
- 一定要遵循RFC 2369的格式要求:每个退订选项用尖括号
<>包裹,多个选项之间用逗号加空格分隔 - 除了URL,你还可以添加mailto地址,这样用户在邮件客户端里直接点击退订按钮就可以发送退订邮件,体验更好
- 确保你的SES客户端是正确初始化的(比如用AWS SDK for PHP v3,配置好access key、secret key和区域)
- 发送测试邮件后,可以在邮件客户端里查看原始邮件头,确认
List-Unsubscribe是否已经正确添加
如果之前你的代码里没有包含Headers这个配置项,那这就是问题的核心——SES不会自动帮你添加这个头,必须手动定义。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

