我尝试使用亚马逊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
地址的邮件 - 我设置了这个地址,并且确实启用了电子邮件反馈转发....
我可能缺少什么想法?
答案 0 :(得分:1)
您投入的标题表明真正的问题是错误的期望。您可以找到的所有内容都会忽略Errors-To:
,并且接收 MTA会将Return-Path:
替换为信封发件人。要控制退回,您需要控制信封发件人(传统上,使用sendmail -f
),并且您在标题中放置的内容完全无关。
答案 1 :(得分:0)
解决。
退回地址与“发件人”地址不同。因此,反弹最终在另一个地址的垃圾邮件中。 有趣的是,该地址有一个过滤器,可以在发送电子邮件时将所有内容转发到我用于“发件人”地址的地址。
所以我的混乱是因为我希望从其他地址转发邮件,但反弹从未被转发。