Amazon SES SMTP Python 使用方法
我正在尝试找出为什么通过Python使用亚马逊SES发送邮件不成功的原因。
下面的例子展示了这个问题,其中user
和pass
已经设置为正确的凭证。
>>> import smtplib
>>> s = smtplib.SMTP_SSL("email-smtp.us-east-1.amazonaws.com", 465)
>>> s.login(user, pw)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/smtplib.py", line 549, in login
self.ehlo_or_helo_if_needed()
File "/usr/lib/python2.6/smtplib.py", line 510, in ehlo_or_helo_if_needed
(code, resp) = self.helo()
File "/usr/lib/python2.6/smtplib.py", line 372, in helo
(code,msg)=self.getreply()
File "/usr/lib/python2.6/smtplib.py", line 340, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
这个错误信息并没有什么特别有用的地方,我尝试了其他的变体,但就是无法让它工作。
我可以用我的Thunderbird邮箱客户端通过这些设置发送邮件,所以我猜测可能是我漏掉了什么与TLS相关的设置。
5 个回答
6
我发现这个问题是由于时间设置不对造成的。因为我是在命令行执行那段代码,服务器会超时。如果我把它放到一个Python文件里运行,它的执行速度就足够快,可以确保消息被发送出去。
8
这是一个完整的例子:
import smtplib
user = ''
pw = ''
host = 'email-smtp.us-east-1.amazonaws.com'
port = 465
me = u'me@me.com'
you = ('you@you.com',)
body = 'Test'
msg = ("From: %s\r\nTo: %s\r\n\r\n"
% (me, ", ".join(you)))
msg = msg + body
s = smtplib.SMTP_SSL(host, port, 'yourdomain')
s.set_debuglevel(1)
s.login(user, pw)
s.sendmail(me, you, msg)
13
我觉得现在用SMTP_SSL和SES不太管用了。应该使用starttls()。
smtp = smtplib.SMTP("email-smtp.us-east-1.amazonaws.com")
smtp.starttls()
smtp.login(SESSMTPUSERNAME, SESSMTPPASSWORD)
smtp.sendmail(me, you, msg)