编程语言
首页 > 编程语言> > 【Python】使用smtplib模块发邮件报错“smtplib.SMTPDataError: 554, 5.2.0”

【Python】使用smtplib模块发邮件报错“smtplib.SMTPDataError: 554, 5.2.0”

作者:互联网

目录

前言

记录下我在使用smtplib里踩过的坑

错误一:smtplib.SMTPDataError: 554, 5.2.0

工作中用到了使用Python自动发邮件,选择采用了python自带的smtplib模块,上菜鸟教程参考了其中python基础教程-Python SMTP发送邮件,在最后程序运行的时候,报了一个错误。

  File "C:\Users\**\email.py", line 53, in main
    smtpObj.sendmail(sender, receivers, message.as_string())
  File "C:\Program Files (x86)\**\lib\smtplib.py", line 888, in sendmail
    raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (554, b"5.2.0 STOREDRV.Submission.Exception:InvalidRecipientsException; Failed to process message due to a permanent exception with message Recipient '******@qq.com' is not resolved. All recipients must be resolved before a message can be submitted. InvalidRecipientsException: Recipient '*******@qq.com' is not resolved. All recipients must be resolved before a message can be submitted. [Hostname=HK***.apcprd***.prod.outlook.com]")

简单翻一下报错给到我们的信息内容:无法处理邮件,因为邮件收件人的帐户存在异常没有被解决。必须先解析所有收件人,然后才能提交邮件。

很明显,这个问题是收件人邮箱报错导致的。遂,上才艺,百度搜索,结果很尴尬,搜索半天都找不出什么有用的信息。
不过,功夫不负有心人,最终还是在一篇帖子上找到了问题原因,有其他小伙伴在一年前也碰到过类似的问题,所以我记录下,

问题的原因在于这段代码

message['To'] =  Header("测试", 'utf-8')

截图:

png

解决方法有2中:

  1. 去掉'utf-8'
    message['To'] = Header("*****@qq.com", 'utf-8')
  2. 直接赋值
    message['To'] = "*****@qq.com"

其实最后测下来,['From']和['To']都是可以直接赋值,不影响邮件发送。代码可以简化成下面这个样子:

message = MIMEText(content) # 邮件文本内容
message['From'] = fromAddr  # 发送者
message['To'] = toAddr  # 接收者
message['Subject'] = subject # 邮件标题

为什么可以这么简单,因为查看Python官方文档可以得知email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, *, policy=compat32)

所以其实MIMEText只需要传入内容就可以了。

错误二:smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.

期间还有另一个报错,查询到的愿意你是因为在代码中缺少了两行代码(第2、3行):

smtpObj = smtplib.SMTP("smtp.****.com",587)
smtpObj.ehlo()  # 向邮箱发送SMTP 'ehlo' 命令
smtpObj.starttls()

参考文档

标签:Python,554,报错,smtplib,com,message,邮件,SMTPDataError
来源: https://www.cnblogs.com/k53247l2/p/15074496.html