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

时间:2020-01-07 20:18:29

标签: python email ssl office365 smtplib

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"], 


                )
            )

1 个答案:

答案 0 :(得分:1)

来自the documentation of SMTP_SSL

在从连接开始就需要SSL且不适合使用starttls()的情况下,应使用SMTP_SSL。

因此,SMTP_SSL用于隐式SMTP,而该端口的公共端口是465。端口587则用于显式SMTP,在该SMTP中,进行普通连接,然后使用STARTTLS命令升级到SSL。

这里发生的是,客户端尝试与不希望SSL / TLS的服务器通话SSL / TLS,因此将使用非TLS数据进行答复。尽管如此,这些仍然被解释为Tls,这导致了这种奇怪的[SSL: WRONG_VERSION_NUMBER]

要解决此问题,请使用端口465(而不是587)和SMTP_SSL(不受Office365支持)或使用端口587,但要使用starttls

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