尝试使用带有 Python 的 SMTP 发送电子邮件时出现 SMTPNotSupportedError

SMTPNotSupportedError when trying to send email using SMTP with Python

我正在尝试 运行 一个使用 Python 从本地服务器(不是 gmail、office 等)发送电子邮件的脚本

我的代码如下:

    message = MIMEMultipart()
    message['From'] = 'noreply@test.com'
    message['To'] = 'hello@test.com'
    msg_body = 'test'

    server = SMTP('123.456.78.901', 01)
    server.starttls() 

    server.sendmail(message['From'], message['To'], msg_body)
    server.quit()

以下行发生错误:

server.starttls()

内容如下:

SMTPNotSupportedError: STARTTLS extension not supported by server.

当我使用以下代码行通过 gmail 服务器发送电子邮件时,这段代码工作得很好:

server = SMTP('smtp.gmail.com', 587)

不过,我现在正尝试让电子邮件直接从本地服务器发送。感谢任何帮助,谢谢!

这仅仅意味着您的本地服务器不支持 STARTTLS。所以不要试图那样做。只有当您通过不安全的 public 网络连接时,TLS 加密才有意义。

您已经建立了到 SMTP 服务器的连接。如果您从程序中删除 server.starttls() 行,您将继续使用现有连接,不加密。

(STARTTLS 有点 hack;与其他基于 SSL 的协议不同,您从未加密的连接开始,然后升级以在同一电路上建立加密连接(如果服务器支持它并且客户端请求它)。 )

但是, sendmail 的第三个参数应该是有效的 SMTP 消息,而不是随机的自由格式字符串。您已经有一条消息,但您只是想发送一个不同的字符串。

    server.sendmail(message['From'], message['To'], msg.as_string())  # not msg_body

升级到 Python 3.6+ 库并使用 EmailMessage 而不是 MIMEMultipart 开始构建消息可能更好。 Python email examples documentation 包含所有详细信息。