Amazon SES SMTP Python用法

Kev*_*lan 10 python smtp amazon-web-services amazon-ses

我试图诊断为什么通过Amazon SES发送电子邮件不能通过python工作.

以下示例演示了此问题,其中userpass设置为适当的凭据.

>>> 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
Run Code Online (Sandbox Code Playgroud)

这条消息不是特别有用,并尝试过其他的vraiations,但似乎无法让它工作.

我可以使用我的雷鸟电子邮件客户端使用这些设置发送电子邮件,所以我的假设是我的任务与TLS相关.

jrw*_*ren 11

我认为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)
Run Code Online (Sandbox Code Playgroud)


Mor*_*rdi 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)
Run Code Online (Sandbox Code Playgroud)


Kev*_*lan 5

我已经确定这个问题是由时间造成的。因为我是从命令行执行该代码,所以服务器会超时。如果我将它放入一个 python 文件并运行它,它的执行速度足够快以确保发送消息。