def send_mail(to, subject, body_text):
SERVER = "smtp.office365.com"
FROM = "myemail@mycompany.com"
# Prepare actual message
msg = EmailMessage()
msg.set_content(body_text, subtype='html')
msg['Subject'] = subject
msg['From'] = FROM
msg['To'] = to
# Send the mail
server = smtplib.SMTP(SERVER, 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("myemail@mycompany.com", "password")
server.send_message(msg)
server.quit()
我有这个发送电子邮件的功能。这给了我错误-
smtplib.SMTPNotSupportedError: STARTTLS extension not supported by server.
我试图遵循这里的一些答案- STARTTLS扩展不支持的服务器和修改我的代码,以删除server.ehlo()
之前的server.starttls()
,但这给了这个错误-
smtplib.SMTPHeloError: (501, b'5.5.4 Invalid domain name [SN2PR01CA0061.prod.exchangelabs.com]')
也尝试通过删除行server.starttls()
来运行,这给出了这个错误-
smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
直到现在,当我将调制解调器从Xfinity标准租用调制解调器更改为商店购买的Netgear Nighthawk C7000时,send_email
功能工作正常。我的互联网服务提供商是Xfinity。我不知道这是不是一个问题,但我觉得我应该提一下,因为这是自从电子邮件发送停止工作以来唯一发生变化的事情。
解决问题-
调试问题-在server = smtplib.SMTP(SERVER, 587)
之后添加server.set_debuglevel(1)
以获得响应:
send: 'ehlo DESKTOP-B47NVUE.hsd1.tx.comcast.net.rn'
reply: b'501 5.5.4 Invalid domain name [SN4PR0701CA0045.namprd07.prod.outlook.com]rn'
reply: retcode (501); Msg: b'5.5.4 Invalid domain name [SN4PR0701CA0045.namprd07.prod.outlook.com]'
除了上面的响应,它还会抛出这个:
File "C:UsersDhruv GamiAppDataLocalProgramsPythonPython36libsmtplib.py", line 752, in starttls
"STARTTLS extension not supported by server.")
smtplib.SMTPNotSupportedError: STARTTLS extension not supported by server.
解决——我使用这里给出的答案- Office365 smtp服务器不响应python中的ehlo()来解决它。
基本上在send_mail
代码的两个地方都使用server.ehlo('mylowercasehost')
。