为什么亚马逊SES邮件模拟器反弹不起作用? (我错过了标题还是什么?)

时间:2016-05-24 14:18:09

标签: python email amazon-web-services amazon-ses boto3

我尝试使用亚马逊SES模拟器,如下所示:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/mailbox-simulator.html

消息正文如下:

MIME-Version: 1.0
Content-Type: multipart/alternative; charset="utf-8";
 boundary="===============123456789=="
Content-Transfer-Encoding: base64
Subject: hello test message!
Reply-To: my_address@my_provider.com
To: complaint@simulator.amazonses.com
Return-Path: my_address@my_provider.com
Bounces-to: my_address@my_provider.com
Errors-to: my_address@my_provider.com
From: my_address@my_provider.com

--===============123456789==
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

Ym9keSB3aXRoIG5vbmNlOiAw

--===============123456789==
MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

Ym9keSB3aXRoIG5vbmNlOiAw

--===============123456789==--

我将此作为正文发送,并使用boto3接口ses_client.send_raw_message

我正在使用类似的内容生成此消息正文

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import re

msg = MIMEMultipart('alternative')
msg.set_charset('utf8')

text_message='Ym9keSB3aXRoIG5vbmNlOiAw'

p = re.compile('<.*?>')
text_message = 'body with nonce: {}'.format(str(nonce))
text = MIMEText(p.sub('', text_message), 'plain', 'utf8')
html = MIMEText(text_message, 'html', 'utf8')
msg.attach(text)
msg.attach(html)

source = 'my_email@my_provider.com'
msg['Subject'] = 'hello test message!'

msg['Reply-To'] = source
msg['To'] = to_mail
msg['Return-Path'] = source
msg['Bounces-to'] = source
msg['Errors-to'] = source

所以我可以通过SES发送电子邮件,它工作得很好。 我也可以发送电子邮件到complaint@simulator.amazonses.com,这是有效的。 我还没有设置任何SNS消息,但我希望通过我设置的所有标头字段在所需地址处获得反弹。但是,如果我使用bounce@simulator.amazonses.com,则不会发生任何事情。

这是亚马逊承认的标题字段列表: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/header-fields.html

我还启用了电子邮件反馈转发功能,如下所述: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications-via-email.html

另外,为了发送电子邮件,我使用这个逻辑:

amazon_client = boto3.client('ses', 'region', **credentials)
amazon_client.send_raw_email(
            Source=from_mail,
            Destinations=to_mails,
            RawMessage={'Data': body}
        )

根据记录如何接收通知的页面,我应该收到指定的Source地址的邮件 - 我设置了这个地址,并且确实启用了电子邮件反馈转发....

我可能缺少什么想法?

2 个答案:

答案 0 :(得分:1)

您投入的标题表明真正的问题是错误的期望。您可以找到的所有内容都会忽略Errors-To:,并且接收 MTA会将Return-Path:替换为信封发件人。要控制退回,您需要控制信封发件人(传统上,使用sendmail -f),并且您在标题中放置的内容完全无关。

答案 1 :(得分:0)

解决。

退回地址与“发件人”地址不同。因此,反弹最终在另一个地址的垃圾邮件中。 有趣的是,该地址有一个过滤器,可以在发送电子邮件时将所有内容转发到我用于“发件人”地址的地址。

所以我的混乱是因为我希望从其他地址转发邮件,但反弹从未被转发。