我正在使用pyramid_exclog记录异常并将这些异常作为电子邮件发送。我正在使用Amazon aws SMTP发送电子邮件。但我收到以下错误:
SMTPAuthenticationError: (530, 'Must issue a STARTTLS command first')
这是我使用的代码:
[handler_email_exc_handler]
class = handlers.SMTPHandler
args = (('email-smtp.us-east-1.amazonaws.com', 587), 'no-reply@company.com', ['me@company.com'], 'Company Exception' ,('<username>','<user_key>'),None)
level = ERROR
formatter = exc_formatter
据我所知,aws凭证没有任何问题,因为我用它们通过Thunderbird发送邮件。
答案 0 :(得分:4)
这不是凭据,至少不是根据此错误消息。您试图在不使用TLS的情况下向SES说SMTP - 您正在尝试通过未加密的连接对自己进行身份验证。这不安全,因为它可能会导致您的凭据受到损害,因此不受支持。
Amazon SES SMTP端点要求使用传输层安全性(TLS)加密所有连接。 (请注意,TLS通常由其前身协议SSL的名称引用。)Amazon SES支持两种建立TLS加密连接的机制:STARTTLS和TLS Wrapper。检查软件的文档,以确定它是否支持STARTTLS,TLS Wrapper或两者。
如果您的软件不支持STARTTLS或TLS Wrapper,您可以使用开源stunnel程序设置加密连接(称为“安全隧道”),然后使用安全隧道连接到Amazon SES SMTP端点
http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html
我不是Python用户,但对Google机器的快速检查表明:
要指定使用安全协议(TLS),请将元组传递给安全参数。这仅在提供身份验证凭据时使用。元组应该是空元组,或者是具有密钥文件名称的单值元组,或者是具有密钥文件和证书文件名称的2值元组。 (此元组将传递给smtplib.SMTP.starttls()方法。)
啊哈,它甚至提到了“笨蛋”。
如果我找到了正确的引用,也许你的最后一个参数应该是()
而不是None
,因为你不需要密钥文件或证书文件。