当前位置:   article > 正文

QQ邮箱使用SMTPLIB 报错550,‘The “From” header is missing or invalid.原因以及解决办法_smtplib.smtpdataerror: (550, b'the "from" header i

smtplib.smtpdataerror: (550, b'the "from" header is missing or invalid. plea

QQ邮箱使用SMTPLIB 报错550,'The “From” header is missing or invalid.原因以及解决办法

问题描述

最近在项目里遇到的邮箱邮件发送失败错误代码为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}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在正式环境中,我们使用的From Header是对于发件人的描述,比如“LogSender”。经过替换邮箱类型测试,发现除了QQ邮箱,其他邮箱使用该header类型均可成功发送。此报错应为,QQ邮箱政策更新导致。

查看QQ邮箱帮助:https://help.mail.qq.com/detail/0/994.

image-20230417094424885

该条款限制From Header格式为: 昵称+空格+<邮箱地址>形式:nickname <prefix@domain>

此时我们如果将From Header更改为:LogSender <217xxx@qq.com>,发现采用上述代码该报错仍然存在。因此怀疑是编码问题,打印邮箱发送体如下:

1

显然,该错误是From Headerbase64加密了”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}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

但是必须注意:使用QQ邮箱的时候,请务必按照 昵称+空格+<邮箱地址>形式:nickname <prefix@domain>声明From Header。否则即使删除”utf-8“,其报错依旧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/432559
推荐阅读
相关标签
  

闽ICP备14008679号