Pyramid_exclog:SMTPAuthenticationError:(530,'必须首先发出STARTTLS命令')

时间:2015-08-07 07:49:59

标签: amazon-web-services exception-handling smtp pyramid

我正在使用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发送邮件。

1 个答案:

答案 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()方法。)

     

https://docs.python.org/2/library/logging.handlers.html

啊哈,它甚至提到了“笨蛋”。

如果我找到了正确的引用,也许你的最后一个参数应该是()而不是None,因为你不需要密钥文件或证书文件。