QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

文章目录

场景描述

  • QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid
txt 复制代码
失败原因:(550, b'The "From" header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. https://service.mail.qq.com/detail/124/995.')
  • 源码(pthon 3.12
python 复制代码
import smtplib
from email.header import Header
from email.mime.text import MIMEText


class Mail:
    def __init__(self, mail_pass, sender, receivers):
        # 第三方 SMTP 服务
        self.mail_host = "smtp.qq.com"  # 填写邮箱服务器:这个是qq邮箱服务器,直接使用smtp.qq.com
        self.mail_pass = mail_pass  # 填写在qq邮箱设置中获取的授权码
        self.sender = sender  # 填写邮箱地址
        self.receivers = receivers  # 填写收件人的邮箱,QQ邮箱或者其他邮箱,可多个,中间用,隔开

    def send(self, subject, content):
        message = MIMEText(content, 'plain', 'utf-8')  # 邮件内容

        message['From'] = Header(self.sender)  # 邮件发送者姓名
        # message['To'] = Header(self.receivers)  # 邮件接收者姓名

        message['Subject'] = Header(subject, 'utf-8')  # 发送的主题

        print(message)

        try:
            smtpObj = smtplib.SMTP_SSL(self.mail_host, 465)  # 建立smtp连接,qq邮箱必须用ssl边接,因此边接465端口
            smtpObj.login(self.sender, self.mail_pass)  # 登陆
            smtpObj.sendmail(self.sender, self.receivers, message.as_string())  # 发送
            smtpObj.quit()
            print(f"发送成功:sender:{self.sender} receivers:{self.receivers}")
        except smtplib.SMTPException as e:
            print(f"发送失败:sender:{self.sender} receivers:{self.receivers} ,失败原因:{e}")


if __name__ == '__main__':
    mail = Mail("xxxx", "xxxx@qq.com", ["xxxx@gmail.com"])
    mail.send("titel", "content")

问题排查

根据提示查看原因

  • 看到 QQ 邮箱对 header 中的 from 有合法性校验,我们的字段格式符合要求,怀疑是字符编码问题。

查看封装的 message

  • 通过打印封装的 message 查看我们的 From 字段乱码,去掉 utf-8 编码。
txt 复制代码
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
From: =?utf-8?q?XXX=40qq=2Ecom?=
Subject: =?utf-8?q?titel?=

Y29udGVudA==
  • 再次测试,正常发送邮件。
txt 复制代码
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
From: XXXXXX@qq.com
Subject: =?utf-8?q?titel?=

Y29udGVudA==

发送成功:sender:XXXXX@qq.com receivers:['XXXXX@gmail.com']

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

相关推荐
Gvto2 天前
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
go·smtp·mailtrap
量化交易学徒7 个月前
【DevOps】全面解析SMTP、POP3、IMAP协议及内网邮件服务器的搭建指南
运维·devops·smtp·imap·pop3
Damon小智9 个月前
C#进阶-实现邮箱收发功能
c#·asp.net·exchange·smtp·email·imap·pop3
++⁠⁠1 年前
3、安全开发-Python-协议库爆破&FTP&SSH&Redis&MYSQL&SMTP等
redis·python·mysql·ssh·ftp·smtp·协议爆破
因果尽加吾身1 年前
Python 自动化之收发邮件(一)
python·自动化·邮件·smtp·imap
danplus1 年前
如何配置Outlook的SMTP信息?
outlook·smtp·smtp发信·邮件群发系统·邮件营销系统·外贸邮件群发·edm邮件群发