【Python】使用smtplib模块发邮件报错“smtplib.SMTPDataError: 554, 5.2.0”
2021/7/29 12:35:58
本文主要是介绍【Python】使用smtplib模块发邮件报错“smtplib.SMTPDataError: 554, 5.2.0”,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 前言
- 错误一:smtplib.SMTPDataError: 554, 5.2.0
- 错误二:smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
- 参考文档
前言
记录下我在使用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')
截图:
解决方法有2中:
- 去掉'utf-8'
message['To'] = Header("*****@qq.com", 'utf-8')
- 直接赋值
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)
- _text:邮件文本内容字符创,str格式
- _subtype:默认参数,默认为plain(也就是邮件是文本格式,而不是html)
- _charset:是文本的字符集并会作为参数传递给 MIMENonMultipart 构造器;如果该字符串仅包含 ascii 码位则其默认值为 us-ascii,否则为 utf-8。
- policy:命名关键字参数,使用它指定的规则更新和序列化邮件消息的表示形式。(这里我理解是该字段定义了邮件内容的格式标准)
所以其实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 的smtplib 的坑 554 DT:SPM 163 smtp12(上面554,5.2.0的问题解决启发来自该链接评论)
- email.mime: 从头创建电子邮件和 MIME 对象
这篇关于【Python】使用smtplib模块发邮件报错“smtplib.SMTPDataError: 554, 5.2.0”的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门