python3 新式邮件写法 附件乱码 解决

2023-11-15

import sys
import re
import mimetypes
import base64
import traceback
from pathlib import PurePath
from datetime import date
from calendar import monthrange

import smtplib
from email.headerregistry import Address, Group
from email.utils import localtime, make_msgid
from email.message import EmailMessage

邮件服务器 = "smtp.exmail.qq.com"
邮件服务器_端口 = 465
发送者账号 = "public@qq.com"
发送者密码 = "Admin"
发送者昵称 = "公司"



def get_type(path):
    ctype, encoding = mimetypes.guess_type(path)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    return ctype.split('/', 1)


def dd_b64(headstr):
    """对邮件header及附件的文件名进行两次base64编码,防止outlook中乱码。email库源码中先对邮件进行一次base64解码然后组装邮件,所以两次编码"""
    headstr = '=?utf-8?b?' + base64.b64encode(headstr.encode('UTF-8')).decode() + '?='
    headstr = '=?utf-8?b?' + base64.b64encode(headstr.encode('UTF-8')).decode() + '?='
    return headstr


def make_msg(to_name, to_addrs, html_table):
    msg = EmailMessage()
    msg['From'] = Address(dd_b64(发送者昵称), addr_spec = 发送者账号)  # 省略addr_spec会出现 由 xxx 代发
    msg['To'] = Address(dd_b64(to_name), addr_spec = to_addrs)
    msg['Subject'] = 邮件主题
    msg['Date'] = localtime()

    msg_cid = make_msgid()
    html_table = html_table.replace('</body>', f'<img src="cid:{msg_cid[1:-1]}" width="300"/></body>')
    msg.add_alternative(html_table, subtype = 'html')
    # msg.set_content(html_table,subtype = 'html')
    path = r"E:\OneDrive\图片\壁纸\forests2.jpg"
    with open(path, 'rb') as img:
        msg.get_payload()[0].add_related(img.read(), *get_type(path), cid = msg_cid)

    path = r"C:\Users\sharp\Desktop\新建 Microsoft Excel 工作表.xlsx"
    with open(path, 'rb') as fi:
        msg.add_attachment(fi.read(), *get_type(path), filename = dd_b64(PurePath(path).name))

    return msg


server = smtplib.SMTP_SSL(邮件服务器, 邮件服务器_端口)
server.login(发送者账号, 发送者密码)
server.send_message(msg)

 

解决乱码的中心就是先两次base64,原因在代码的注释中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python3 新式邮件写法 附件乱码 解决 的相关文章

  • 动态向类添加类方法

    我有以下片段 FEED TYPES fan mail Fan Mail review Review tip Tip fan user Fan User fan song Fan Song fan album Fan Album played
  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • scipy.optimize on pandas dataframe

    我试图搜索它 但结果很差 有人可以向我解释一下如何在 Pandas DataFrame 上执行 optimize minimize 以便最小化 DataFrame 中的类别和结果列之间的错误 考虑这个例子 import pandas as
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • Keras model.predict 函数给出输入形状错误

    我已经在 Tensorflow 中实现了通用句子编码器 现在我正在尝试预测句子的类概率 我也将字符串转换为数组 Code if model model type universal classifier basic class probs
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 为什么 re.findall 在查找字符串中的三元组项时不具体。 Python

    所以我有四行代码 seq ATGGAAGTTGGATGAAAGTGGAGGTAAAGAGAAGACGTTTGA OR 0 re findall r ATG 9 TAA TAG TGA seq 首先让我解释一下我正在尝试做什么 如果这令人困惑
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

    我试图在 python 中将 jp2 栅格产品作为栅格打开 但当我们使用 raterio 和 gdal 包时没有成功 我收到此错误 RasterioIOError b4 jp2 not recognized as a supported f
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • UnicodeDecodeError:部署到 Heroku 时,“utf-8”编解码器无法解码位置 0 中的字节 0xff

    我尝试在heroku上部署我的简单django项目 但我不明白如何解决这个问题 这是git push heroku master remote Traceback most recent call last remote File tmp
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • python中有没有一种方法可以将存储在列表中的正则表达式模式列表应用到单个字符串?

    我有一个正则表达式模式列表 存储在列表类型中 我想将其应用于字符串 有谁知道一个好方法 将列表中的每个正则表达式模式应用于字符串 和 如果匹配 则调用与列表中该模式关联的不同函数 如果可能的话我想用 python 来做这件事 提前致谢 im
  • pandas.read_fwf 忽略提供的数据类型

    我正在从文本文件导入数据框 我想指定列的数据类型 但 pandas 似乎忽略了dtype input 一个工作示例 from io import StringIO import pandas as pd string USAF WBAN S
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to

随机推荐

  • 区块链知识转载博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    注 这是本人读到的关于共识算法最全和最好的分享博文 系统的介绍了拜占庭容错技术以及共识算法的原理和常用共识算法 原文链接请见后 目录 一 拜占庭容错技术 Byzantine Fault Tolerance BFT 二 PBFT Practi
  • 智慧“昆明”在路上 未来充满精彩

    智慧城市是运用物联网 云计算 大数据 移动互联网 空间地理信息集成等新一代信息技术 促进城市规划 建设 管理和服务智慧化的新理念和新模式 近年来 昆明市全面加快智慧城市建设 力争通过三年的努力 打造区域信息辐射中心的核心区 生态 融合发展的
  • Spring Boot系列四 Spring @Value 属性注入使用总结一

    Value注入 不通过配置文件的注入属性的情况 通过 Value将外部的值动态注入到Bean中 使用的情况有 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性 注入beanInject对象的属性another 注入文件
  • C语言if选择练习题

    C语言实现输出对应成绩的等级 include
  • hdu 5756:Boss Bo

    题目链接如下 Problem 5756 先用dfs确定每个节点的序号编号 并且可以获得每个节点可以包括的子树节点区间范围 再用线段树建立一棵树 在第一次建立的时候我们记录每个节点的深度 然后再进行一次dfs 这次dfs用来更新以不同节点为根
  • 【实验九】【使用触发器实现数据完整性】

    文章目录 触发器 一 实现域完整性 二 实现参照完整性 三 比较约束与触发器的执行顺序 Reference 触发器 触发器 trigger 是用户定义在关系表上的一类由事件驱动的特殊过程 触发器又叫做事件 条件 动作 event condi
  • ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版

    QQ 23426945 PHP技术群 159789818 个人技术博客 https www itqaq com TP6 0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用 经过测试 最后得出域名绑定应用是最合适的部署方式 如果有更
  • React源码分析3-render阶段(穿插scheduler和reconciler)

    本章将讲解 react 的核心阶段之一 render阶段 我们将探究以下部分内容的源码 更新任务的触发 更新任务的创建 reconciler 过程同步和异步遍历及执行任务 scheduler 是如何实现帧空闲时间调度任务以及中断任务的 触发
  • SpringBoot 如何实现多数据源

    SpringBoot 如何实现多数据源 第一步 配置yml spring datasource type com alibaba druid pool DruidDataSource datasource1 url jdbc mysql 1
  • vue毕业设计分享 100例 (五)

    文章目录 前言 题目1 基于SSM的婚纱摄影业务系统 br 题目2 基于SSM的家教网课学习平台 br 题目3 基于SSM的家庭美食食谱管理系统 br 题目4 基于SSM的驾校预约培训管理系统 br 题目5 基于SSM的教师评价考核管理系统
  • 远程登陆之SSH的简单用法及命令

    SSH简单使用 SSH的安装 启动服务器的SSH服务 SSH远程登陆 口令登陆 公钥登陆 配置别名 传输文件 SSH只是一种协议 存在多种实现 既有商业实现 也有开源实现 OpenSSH是一种免费开源实现 OpenSSH是用于使用SSH协议
  • zabbix监控硬件

    一 通过snmp监控 1 idrac上开启snmp服务 2 然后到zabbix server服务器上测试一下是否能get到数据 snmpget v 2c c 1 3 6 1 4 1 674 10892 2 1 1 2 0 3 添加主机 二
  • rabbitmq的发布确认和事务

    2019独角兽企业重金招聘Python工程师标准 gt gt gt confirm的工作机制 Confirms是增加的一个确认机制的类 继承自标准的AMQP 这个类只包含了两个方法 confirm select和confirm select
  • 读取dgn文件思路

    1 opendgn 2 sourceforge里面有dgn读取内容 3 dgndirect 4 DGNLib 5 Teigha 6 lt
  • ERROR: cannot launch node of type [turtlebot_teleop/turtlebot_teleop_key] 问题解决

    当遇到问题 采取方式为 也就是说先用 rospack find 命令找是否存在 不存在就安装 sudo apt get install ros kinetic XXX 从网上查需要安装哪些内容 转载于 https www cnblogs c
  • 使用U盘为虚拟机安装系统

    转载自点击打开链接http www cnblogs com happy xiaoxiao p 8010547 html 前提 使用虚拟机安装WIN8系统时 由于WIN8镜像文件大于4G无法使用虚拟安装 所以使用U盘安装 1 装有U盘启动的W
  • 点云高度归一化处理(附 matlab 代码)

    由于不同地物之间存在着高程的差异 为了去除地形起伏对点云数据高程值的影响 所以需要根据提取出的地面点进行点云归一化处理 这一步是很多算法的基础 可以提高后续点云分类或分割的准确度等 如下图所示 归一化的过程其实相对简单 遍历每一个非地面点
  • Simon‘s writting 全网最全笔记

    石墨文档写完上传的 格式有点乱 凑合着看 排班不重要 内容最重要 一键三连的朋友可以私信我要word pdf 图片 markdown 那个看得舒服看哪个 An IELTS training course Understand the tas
  • Visual Studio下安装C/C++图形库(easyx)2022版

    一 Easyx下载链接 EasyX Graphics Library for C 二 Visual Studio上安装Easyx 1 右击EasyX 20220901 exe 选择管理员身份运行 2 点击下一步 3 它会自动检测 根据自己需
  • python3 新式邮件写法 附件乱码 解决

    import sys import re import mimetypes import base64 import traceback from pathlib import PurePath from datetime import d