Office365 smtp 服务器不响应python中的ehlo() [英] Office365 smtp server does not respond to ehlo() in python
问题描述
我正在尝试使用 Office365 smtp 服务器来自动发送电子邮件.我的代码以前适用于 gmail 服务器,但不适用于 Python 中使用 smtplib 的 Office365 服务器.
I am trying to use Office365 smtp server for automatically sending out emails. My code works previously with gmail server, but not the Office365 server in Python using smtplib.
我的代码:
import smtplib
server_365 = smtplib.SMTP('smtp.office365.com', '587')
server_365.ehlo()
server_365.starttls()
ehlo() 的响应是:(501, '5.5.4 Invalid domain name [DM5PR13CA0034.namprd13.prod.outlook.com]')
The response for the ehlo() is: (501, '5.5.4 Invalid domain name [DM5PR13CA0034.namprd13.prod.outlook.com]')
此外,.starttls() 会引发 SMTPException: STARTTLS 扩展不受服务器支持
In addition, .starttls() raises a SMTPException: STARTTLS extension not supported by server
知道为什么会这样吗?
推荐答案
smtplib ehlo 函数会自动将发件人主机名添加到 EHLO 命令中,但是 Office365 要求域全部小写,所以当你默认主机名是大写时错误.
The smtplib ehlo function automatically adds the senders host name to the EHLO command, but Office365 requires that the domain be all lowercase, so when youe default host name is uppercase it errors.
您可以通过将 ehlo 命令中的发件人主机名显式设置为小写来修复.
You can fix by explicitly setting sender host name in the ehlo command to anything lowercase.
import smtplib
server_365 = smtplib.SMTP('smtp.office365.com', '587')
server_365.ehlo('mylowercasehost')
server_365.starttls()
这篇关于Office365 smtp 服务器不响应python中的ehlo()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!