【问题标题】:Python: I cannot send an email, whatever I tryPython:无论我尝试什么,我都无法发送电子邮件
【发布时间】:2020-10-01 14:50:45
【问题描述】:

所以我尝试通过 Python 从我的一个电子邮件帐户向另一个帐户发送电子邮件,无论我尝试什么,我都会收到不同的错误消息,并且谷歌搜索它们对我没有帮助。所有建议的修复都对我不起作用,我只是筋疲力尽。我在 GMail 和 web.de 上都试过了,都不起作用。

错误消息(取决于加密 (tls/ssl) 或提供商 (web.de/gmail)):

不接受用户名和密码。

交易失败未经授权的发件人地址。

SSL:WRONG_VERSION_NUMBER

简而言之我的代码:

context = ssl.create_default_context()

with smtplib.SMTP_SSL('smtp.web.de', port, context=context) as server:
    server.login(sender, password)
    server.sendmail(sender, reciever, message)

【问题讨论】:

  • 当您尝试对未启用 TLS 的事物执行 TLS 时,WRONG_VERSION_NUMBER 通常。您是否询问过您的提供商是否可以通过 TLS 与他们连接?你问过他们你的错误吗?
  • 首先感谢您的回复,但我自己修复了它。我对 server.login() 命令进行了编码,然后它起作用了,因此尝试更改其中的内容,问题是发送文本的格式。

标签: python ssl smtp gmail


【解决方案1】:

尝试为您的服务器设置正确的 ssl.SSLContext。 例如: 上下文 = ssl.SSLContext(ssl.PROTOCOL_TLS) 要么 上下文 = ssl.SSLContext(ssl.PROTOCOL_SSLv2)

https://docs.python.org/3.0/library/ssl.html

【讨论】:

  • 我现在尝试了 ssl 中可用的所有不同协议,但它们都不起作用,我仍然收到错误:[SSL: WRONG_VERSION_NUMBER] 错误版本号 (_ssl.c:1108)
  • SSLv2 ????你当然不应该那样做!你的意思是 SSLv23 吗,它有(不幸的是)完全不同的含义(这意味着自动协商最高可能的协议值,所以实际上希望是 TLS 1.3 或 1.2)
  • 首先感谢您的回复,但我自己修复了它。我对 server.login() 命令进行了编码,然后它起作用了,因此尝试更改其中的内容,问题是发送文本的格式。
【解决方案2】:
with smtplib.SMTP_SSL('smtp.web.de', port, context=context) as server:

不清楚您使用的是哪个端口,但您喜欢错误的端口,或者您不应该使用smtplib.SMTP_SSLSMTP_SSL 用于从一开始就使用 TLS 的连接(隐式 TLS)。这适用于端口 465 (smtps)。

smtp.web.de 首先不提供对端口 465 的访问。这意味着底层 TCP 连接已经失败,这将导致不同的错误。

因此,您很可能使用了端口 25 (smtp) 或端口 587 (提交)。不过,这两个端口都需要 explicit TLS,即它们从普通连接开始,只有在明确的 STARTTLS 命令之后才升级到 TLS。对于这些端口,代码应如下所示:

context = ssl.create_default_context()
port = 587
with smtplib.SMTP('smtp.web.de', port) as server:
    server.starttls(context=context)
    server.login(sender, password)
    ...

使用隐式 TLS 连接到不使用隐式 TLS 的端口可能会导致非常奇怪的错误消息,因为 TLS 堆栈尝试将来自服务器的响应解释为 TLS,即使它不是 TLS(在这种情况下是普通的欢迎来自 SMTP 服务器的消息,即220 ... Service ready)。因此,您看到的 WRONG_VERSION_NUMBER 实际上并不表示响应的错误版本,而只是表示它试图将纯响应的特定部分解释为 TLS 版本号并由此得到意外结果。

【讨论】:

  • 首先感谢您的回复,但我自己修复了它。我对 server.login() 命令进行了编码,然后它起作用了,所以我尝试更改其中的内容,问题是发送文本的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多