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"],
)
)
答案 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)