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

sid*_*idx 0 smtp exception-handling amazon-web-services pyramid

我正在使用 pyramid_exclog 记录异常并将这些异常作为电子邮件发送。我正在使用 Amazon aws SMTP 发送电子邮件。但我收到以下错误:

SMTPAuthenticationError: (530, 'Must issue a STARTTLS command first')
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

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

据我所知,aws 凭据没有任何问题,因为我使用它们通过 Thunderbird 发送邮件。

Mic*_*bot 5

它不是凭据,至少不是根据此错误消息。您正在尝试在不使用 TLS 的情况下将 SMTP 与 SES 对话——您正在尝试通过未加密的连接对自己进行身份验证。这并不安全,因为它可能会导致您的凭据遭到破坏,因此不受支持。

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,因为您不应该需要密钥文件或证书文件。