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

如何正确解析MimeMessage?解析Received头的for值是否安全?

解析Received头中的for值是否安全?

我们使用Amazon SES接收邮件并存入S3,消息为MIME 1.0格式,有时邮件的To、Cc、Bcc字段为空,这种情况下解析Received头里的for值是靠谱的,但要注意只取SES自身添加的那条Received头,具体原因和注意事项如下:

  • SES生成的Received头里的for值完全可信
    邮件到达SES时,SES会自动添加一条包含自身服务器标识(比如inbound-smtp.eu-west-1.amazonaws.com)的Received头,这条头里的for值对应SMTP会话中的RCPT TO指令内容——也就是邮件实际要投递的目标收件人,这个值是SES在接收邮件过程中直接获取的,发件人无法篡改。

  • 其他中转节点的Received头不可信
    如果邮件经过了第三方中转服务器,这些服务器添加的Received头可能被伪造或篡改,里面的for值不一定是真实收件人,所以必须过滤掉这些,只保留SES生成的那条。

  • 完美适配To/Cc/Bcc为空的场景
    MIME头里的To、Cc、Bcc是发件人可以随意修改甚至清空的(比如群发BCC时To字段常为空,或者发件人故意隐藏收件人),但SMTP层面的RCPT TO是邮件投递的真实目标,SES记录在自己的Received头里的for值就是这个真实信息,刚好能解决MIME头字段为空的问题。

举个你提供的例子:

Received: from sender@email.com (mout.perfora.net [74.208.4.197])
by inbound-smtp.eu-west-1.amazonaws.com with SMTP id i9345l5jt652cm6mnupeorc57rfmf7p6me31ca01
for receiver@email.com;
Mon, 14 Nov 2022 18:41:44 +0000 (UTC)

这条就是SES添加的Received头,里面的receiver@email.com就是真实的收件人,完全可以放心使用。

额外注意事项

  • 解析时要识别SES的Received头:通过inbound-smtp.[区域].amazonaws.com这个特征字符串来筛选,确保只处理SES生成的那条。
  • 兼容格式变化:for后面的收件人可能带尖括号(比如for <receiver@email.com>),解析逻辑要能处理这种格式,提取出正确的邮箱地址。

内容的提问来源于stack exchange,提问作者N. G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:50:28