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

Amazon SES:获取入站邮件的实际收件人

解决Amazon SES多收件人邮件副本的收件人识别问题

我之前也碰到过SES的这个特性,确实有点棘手——当一封邮件发给多个你的域名下的收件人时,SES会为每个收件人单独生成一份邮件副本存到S3,但默认情况下仅靠邮件原生的To字段根本分不清当前副本对应哪个收件人。这里有几个实用的解决方法:

方法1:读取SES专属的自定义头部字段

SES会自动为每一份收件人副本添加专属的头部信息,用来标记这封副本对应的单个收件人,常见的字段有:

  • X-SES-Recipient:直接记录当前副本的目标收件人邮箱
  • X-SES-Original-To:部分配置下会使用这个字段

你可以在Java解析邮件的时候,优先读取这些SES生成的头部,而不是依赖邮件原生的To字段。用JavaMail API的示例代码如下:

// 假设message是你解析后的MimeMessage对象
String targetRecipient = message.getHeader("X-SES-Recipient", null);
if (targetRecipient == null) {
    // 备用方案:尝试读取X-SES-Original-To
    targetRecipient = message.getHeader("X-SES-Original-To", null);
}

if (targetRecipient != null) {
    // 这里拿到的就是当前S3副本对应的单个收件人,直接用来执行对应操作即可
    processRecipientAction(targetRecipient);
}

建议先去S3里下载一两份重复的邮件文件,打开查看头部内容,确认你的SES配置下实际存在哪个字段。

方法2:在S3对象键中嵌入收件人信息

你还可以在配置SES的S3投递规则时,直接把收件人信息写到S3对象的文件名里,这样程序甚至不用解析邮件就能知道对应的收件人。

操作步骤:

  • 登录SES控制台,找到对应的收件规则集
  • 编辑S3动作的配置,在对象键前缀或对象键后缀中使用变量{recipient}
  • 比如设置前缀为incoming-emails/{recipient}/,那么S3里的邮件路径就会变成incoming-emails/A@mydomain.com/xxxxxx.eml,或者后缀设为-{recipient}.eml,文件名就是xxxxxx-A@mydomain.com.eml

你的Java程序在遍历S3对象时,直接从对象键(文件名/路径)里提取{recipient}对应的邮箱地址即可,这种方式效率更高,也避免了解析邮件头部的麻烦。

方法3:检查SMTP信封收件人字段

如果上面两种方法都不适用,还可以尝试读取邮件的Delivered-To或Return-Path字段,这两个字段记录了SMTP传输过程中的实际收件人信息,不过优先级不如SES专属头部高,因为部分邮件客户端可能会修改这些字段。示例代码:

String deliveredTo = message.getHeader("Delivered-To", null);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:41:38