前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

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

原创
作者头像
Lorin 洛林
发布2024-04-12 19:47:38
27700
代码可运行
发布2024-04-12 19:47:38
举报
文章被收录于专栏:其它其它
运行总次数:0
代码可运行

场景描述

  • 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
代码运行次数:0
复制
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编程。

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景描述
  • 问题排查
    • 根据提示查看原因
      • 查看封装的 message
      • 个人简介
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com