我正在尝试使用这里介绍的amazon 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
地址取回邮件——我确实设置了地址,并且我确实为…启用了电子邮件反馈转发。。。。
你知道我可能错过了什么吗?
您放入的标题表明真正的问题是错误的期望。Errors-To:
将被你能找到的所有东西忽略,Return-Path:
将被接收MTA替换为信封发送者。要控制反弹,您需要控制信封发送者(传统上,使用sendmail -f
),并且您在标头中放入的内容完全无关。
已解决。
反弹地址与"发件人"地址不同。因此,反弹最终进入了另一个地址的SPAM。有趣的是,该地址有一个过滤器,可以在发送电子邮件时将所有内容转发到我用作"发件人"地址的地址。
因此,我感到困惑,因为我本以为会收到从另一个地址转发的邮件,但反弹的邮件从未被转发。