将 SMTPLIB SSL 电子邮件与 365 电子邮件地址一起使用时出错


context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.office365.com", 587, context=context) as server:

(587( 当我运行它时,我收到一个 SSL 错误:[SSL: WRONG_VERSION_NUMBER] 错误的版本号 (_ssl.c:1056(。

(465( 我收到超时错误。

我尝试使用端口 465 和 587。当我使用不同的端口时,我收到不同的错误。我确实尝试了 995 只是为了它,但仍然没有运气。如果我使用我的Gmail帐户,我没有问题。

我需要对我的电子邮件帐户做些什么才能正常工作。我也试过.SMTP(( 仍然没有运气。

smtp = smtplib.SMTP("smtp.office365.com",587)
context = ssl.create_default_context()
with smtp.starttls(context=context) as server:
server.login(from_address, password)
for i, r in newhire[mask].iterrows():     
server.sendmail(
from_address,
r["Email"],
message.format(Employee=r["Employee Name"],
StartDate=r["StartDate"],
PC=r["PC"],
Title=r["Title"],
Email=r["Email"], 

)
)

来自SMTP_SSL的文档:

SMTP_SSL应该用于从连接开始就需要 SSL 并且使用 starttls(( 不合适的情况。

因此,SMTP_SSL用于隐式 SMTP,其公共端口为 465。端口 587 用于显式 SMTP,其中完成普通连接,然后使用 STARTTLS 命令升级到 SSL。

这里发生的情况是,客户端尝试向在此阶段不需要 SSL/TLS 的服务器说 SSL/TLS,从而使用非 TLS 数据进行回复。尽管如此,这些被解释为 TlS,这导致了这种奇怪的[SSL: WRONG_VERSION_NUMBER]

要解决此问题,请使用端口 465(而不是 587(和 SMTP_SSL(Office 365 不支持(,或者使用端口 587 但带有 starttls:

with smtplib.SMTP("smtp.office365.com", 587) as server:
server.starttls(context=context)

最新更新