赞
踩
最近在项目里遇到的邮箱邮件发送失败错误代码为550的问题,具体报错为:
(550, b’The “From” header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. 帮助系统 ')
报错函数体如下:
def send_email(self):
try:
email = MIMEText(self.message, self.send_email_type, "utf-8")
email["From"] = Header(self.header_from, "utf-8")
email["To"] = Header(self.header_to, "utf-8")
email["Subject"] = Header(self.subject, "utf-8")
self.sever.sendmail(self.sender, self.receivers, email.as_string())
self.sever_logout()
except Exception as e:
raise EmailSendError(f"邮件发送失败, Err: {e}")
在正式环境中,我们使用的From Header
是对于发件人的描述,比如“LogSender”。经过替换邮箱类型测试,发现除了QQ邮箱,其他邮箱使用该header
类型均可成功发送。此报错应为,QQ邮箱政策更新导致。
查看QQ邮箱帮助:https://help.mail.qq.com/detail/0/994.
该条款限制From Header
格式为: 昵称+空格+<邮箱地址>形式:nickname <prefix@domain
>
此时我们如果将From Header
更改为:LogSender <217xxx@qq.com
>,发现采用上述代码该报错仍然存在。因此怀疑是编码问题,打印邮箱发送体如下:
显然,该错误是From Header
被base64加密了”utf-8“字符串,导致From Header
识别不正确。
删除From Header
中的”utf-8“字符串,或者不声明From Header
为utf-8格式即可。
如下:
def send_email(self):
try:
email = MIMEText(self.message, self.send_email_type, "utf-8")
email["From"] = Header(self.header_from)
email["To"] = Header(self.header_to, "utf-8")
email["Subject"] = Header(self.subject, "utf-8")
self.sever.sendmail(self.sender, self.receivers, email.as_string())
self.sever_logout()
except Exception as e:
raise EmailSendError(f"邮件发送失败, Err: {e}")
但是必须注意:使用QQ邮箱的时候,请务必按照 昵称+空格+<邮箱地址>形式:nickname <prefix@domain
>声明From Header
。否则即使删除”utf-8“,其报错依旧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。