python smtplib.SMTP_SS发邮件提示550, b‘The “From“ header is missing or invalid

news2024/11/25 20:40:14

  发现网站不能注册新用户,报错提示:(550, b’The “From” header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. https://service.mail.qq.com/detail/124/995.')

  定位是注册时不能发邮件验证导致。QQ邮箱的From格式变更,需改为:昵称+空格+<邮箱地址>形式,注意有空格。(原文)
在这里插入图片描述

 原代码:
 message['From'] = Header(fromName, 'utf-8')
 改为:
 message['From'] = Header('nickname <abc@qq.com>')
 
 #若发件人fromName含中文,则需要base64转码
 message['From'] = Header('"=?utf-8?B?UVHpgq7nrrHmmLXnp7DnpLrkvos=?=" <abc@qq.com>')

  先将汉字转为bytes,再bytes转base64。此时还是报错(550, b’The mail may contain inappropriate words or content.‘),一直调试发现转完的base64格式字符串是b’xxxx’形式,还需要将b’xxxx’转为’xxxx’。
  以为这就完了吗,拼接邮箱名称和邮箱地址时fromNamestr打印出来总是少一截,邮箱地址不能显示。不是空格,不是转义字符的问题,是最后的右尖括号,需要用双引号来包裹!
在这里插入图片描述
本以为只是小问题,最后花了好几个小时才搞定,总结一个给大家避坑吧。完整代码如下:

import base64
def send_mail(receivers,content,fromName,toName,subject,type='plain'):
    message = MIMEText(content, type, 'utf-8')
  	#汉字转base64
    fromName64 = base64.b64encode(bytes(fromName, 'utf-8')) 
    #b'xxxx'转为'xxxx'
    fromName64str = str(fromName64,'utf-8') 
    #尖括号拼接用双引号
    fromNamestr = '"=?utf-8?B?' + fromName64str + '=?=" <' + sender + ">"
    message['From'] = Header(fromNamestr)
    #
    message['To'] = Header(toName, 'utf-8')
    message['Subject'] = Header(subject, 'utf-8')
    try:
        smtpObj = smtplib.SMTP_SSL(host=mail_host)
        smtpObj.connect(mail_host, 465)  # 25 为 SMTP 端口号
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        return True
    except smtplib.SMTPException:
        return False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Luckysheet 可实现 Web 的 Excel

一、写在前面 工作中会遇到excel的导入和导出&#xff0c;换个角度看&#xff0c;假如有个 web 版本的excel &#xff0c;且能上传现有的&#xff0c;修改编辑后再下载也是个不错的方案。 Luckysheet 是实现 web版Excel的一个优秀的框架。 Luckysheet &#xff0c;一款纯前端类…

使用nvm在Windows上管理Node版本

1.卸载Windows上安装的Node.js 首先需要卸载我们现在安装的Node.js&#xff0c;控制面板->卸载程序->卸载Node.js 2.下载安装配置nvm 1.下载 GitHub下载链接:https://github.com/coreybutler/nvm-windows/releases 需要下载黄色方框圈中的nvm-setup.exe或者nvm-setup.zip…

数据结构学习分享之复杂度讲解

数据结构第一课 1. 前言2. 数据结构前言2.1 什么是数据结构和算法?2.2 数据结构和算法的重要性2.3 如何学好数据结构和算法?2.4 一些文章和书籍 3. 算法效率3.1 算法的复杂度3.2 复杂度在面试中的考察 4. 时间复杂度4.1 时间复杂度概念4.2 大O的渐近表示法4.3 判断时间复杂度…

从大厂到创业公司,管理上需要怎样转变?

你好&#xff0c;我是舒超。 我职业生涯过去十年的上半段在腾讯负责微博微群、消息流广告、视频评论等社交型的业务系统&#xff0c;下半段在美团基础架构负责云原生基础设施的演进工作&#xff0c;现在星汉未来担任CTO&#xff0c;负责公司产研推进工作。加入星汉未来的时间点…

策略模式——时势造英雄

● 策略模式介绍 在软件开发中常常遇到这样的情况&#xff1a;实现某一个功能可以有多种算法或者策略&#xff0c;我们根据实际情况选择不同的算法或者策略来完成该功能。例如&#xff0c;排序算法&#xff0c;可以使用插入排序、归并排序、冒泡排序。 针对这种情况&#xff0c…

AppWeb 身份验证绕过漏洞 (CVE-2018-8715)

当前漏洞环境部署在vulhub,当前验证环境为vulhub靶场&#xff08;所有实验均为虚拟环境&#xff09; 实验环境&#xff1a;攻击机----kali 靶机&#xff1a;centos7 1、进入靶场&#xff0c;启动环境 2、访问AppWeb控制台&#xff1a;http://your-ip:8080 使用用户名、密码adm…

全景丨0基础学习VR全景制作,平台篇第14章:热点功能-漫游

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 后台功能位置示意 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的交互&#xff0c;增加用户的多元化体验。 漫游热点&#xff0c;即场景切换热点&#…

Jetpack Navigation 源码(一)

当然要先看官网文档&#xff1a;https://developer.android.google.cn/guide/navigation/navigation-getting-started?hlzh-cn 先从FragmentContainerView 开始 首页它是一个View image.png 注意它的name属性 image.png name属性的fragment 是怎么添加到这个View的(当然fragme…

关于Maven,你真的了解它吗?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 目录 一. Maven有哪些核心概念&#xff1f;1.1 Maven中的POM1.2 Maven约定的目录结构1.3 Maven生命周期1.4 Maven的插件和目标1.5 Maven中的…

【面试】MySQL事务的12连问

文章目录 前言1. 什么是数据库事务&#xff1f;2. 事务的四大特性3. 事务的隔离级别有哪些&#xff1f;MySQL的默认隔离级别是什么&#xff1f;4. Mysql为什么选择RR作为默认隔离级别&#xff1f;5. 很多大厂为什么选择RC数据库隔离级别&#xff1f;6. 并发场景&#xff0c;数据…

经典回归算法

回归的概念 回归方程&#xff1a; 写成矩阵&#xff1a; 核心问题&#xff0c;构建预测函数z来映射特征矩阵x和标签y的线性关系 预测的目标值&#xff0c;有连续值也有离散值 连续值&#xff0c;就直接预测输出就行离散值&#xff0c;需要在输出端加一个变换函数例如。Si…

入参校验产品化 schema

与规则引擎不同,规则面向技术, 传入data, 返回 所有异常字段和原因. 面向技术, 先有对象,再有规则, 如何通过交互来编写schema是个难题? 和json-schema区别: 思路上就是反过来的, 面相产品, schema可视化编辑器, 是面向结构设计. 现有模型,才有数据, 才可以编程. 基于配置…

Docker安装运行Nginx容器(纯步骤)

Docker安装Nginx容器并运行 本文章只有步骤&#xff0c;没有原理解释&#xff0c;只做平时学习提示。提前说明&#xff1a;由于nginx里的配置文件比较多&#xff0c;所以本文章不对此配置文件解释而且会有一些小问题&#xff0c;这个你酌情操作&#xff0c;但不影响你nginx容器…

化工厂5G+北斗RTK室外人员定位系统解决方案

化工厂的安全管理工作非常重要&#xff0c;为了确保员工的安全和提高生产效率&#xff0c;建议引入人员定位技术。下面给大家介绍化工厂5G北斗RTK室外人员定位系统解决方案。关于化工厂室内人员定位方案&#xff0c;可以参考我之前写的文章&#xff1a;化工厂5G蓝牙LoRa室内人员…

声网 Token 鉴权机制,以及常见的问题

Token鉴权是什么&#xff1f; Token也称为动态密钥&#xff0c;是在加入频道时用于校验用户权限的一组字符串&#xff1b;鉴权是指在用户访问你的系统前&#xff0c;对其进行身份校验。用户在使用声网服务&#xff0c;如加入音视频通话或登录信令系统时&#xff0c;声网会使用…

广州华锐互动:工厂园区数字孪生系统让企业管理更加高效便捷

随着信息技术的快速发展&#xff0c;企业管理越来越倾向于数字化和智能化&#xff0c;而数字孪生技术在这一领域中扮演着重要角色。 工厂园区数字孪生系统是一种基于数字孪生技术的智能化系统&#xff0c;可以模拟工厂生产过程&#xff0c;将真实场景数字化&#xff0c;并进行…

高阶数据结构 ——— 并查集

文章目录 并查集并查集的原理并查集的实现并查集的初始化查找元素所在的集合合并两个元素所在的集合获取并查集中集合的个数并查集的路径压缩元素的编号问题 并查集的题目省份的数量等式方程的可满足性 并查集 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的…

如何合理使用 Jetpack 组件开发 Android 项目?

Jetpack 是 Android 官方推出的一套开发库&#xff0c;其中包含众多的组件&#xff0c;可以让 Android 开发者更快更高效地开发应用程序。Jetpack 组件分为四大部分&#xff1a;架构、行为、UI 和基础组件。 下面详细阐述如何合理使用 Jetpack 组件开发 Android 项目。 1. 熟练…

openQA----基于openSUSE部署openQA

【原文链接】openQA----基于openSUSE部署openQA &#xff08;1&#xff09;下载 openqa-bootstrap 脚本并执行 cd /opt/ curl -s https://raw.githubusercontent.com/os-autoinst/openQA/master/script/openqa-bootstrap | bash -x&#xff08;2&#xff09;配置apache proxy…

Nestjs全网最佳翻译-概况-守卫-Guards

守卫 带上装饰器 Injectable() 并实现了 CanActivate 接口的类&#xff0c;就是守卫。 守护只做一件事情。他们根据运行时的某些条件&#xff08;如权限、角色、ACL等&#xff09;来决定一个给定的请求是否会被路由处理程序处理。这通常被称为授权。在传统的Express应用程序中…