python模块之email: 电子邮件编码解码 (转)

用email模块来生成邮件也是很简单的,只是需要一些mime的基础知识。下面看看一点mime基础。
MIME消息由消息头和消息体两大部分组成,在邮件里就是邮件头和邮件体。邮件头与邮件体之间以空行进行分隔。这点可以用文本编辑器(比如记事本)查看一个邮件的源文件就可以清除看到。outlook和foxmail自己就有查看源文件的功能。
邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第 一个空白字符不是信息本身固有的。
邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。最常见的类型有text/plain(纯文本)和text/html(超 文本)。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种: multipart/mixed, multipart/related和multipart/alternative。从它们的名称,不难推知这些类型各自的含义和用处。它们之间的层次关 系可归纳为下图所示:

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义 multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。生成邮件就是要生成这各个 MIME部分。email模块对这些处理都是包装好的,看看生成方法:

# -*- encoding: gb2312 -*-
import email
import string, sys, os, email
import time

class MailCreator:
    
def __init__ (self):
        
# 创建邮件的message对象
         self.msg = email.Message.Message()
         self.mail
= ""     
        
    
def create(self, mailheader, maildata, mailattachlist = []):
        
# mailheader 是dict类型,maildata是list, 且里面第一项为纯文本类型,第二项为html.
         # mailattachlist 是list, 里面为附件文件名
         if not mailheader or not maildata:
            
return
        
        
for k in mailheader.keys():
            
# 对subject要作特殊处理,中文要转换一下。
             # 比如 "我的一个测试邮件" 就要转换为 =?gb2312?b?ztK1xNK7uPay4srU08q8/g==?=
             if k == ' subject ' :
                 self.msg[k]
= email.Header.Header(mailheader[k], ' gb2312 ' )           
            
else :
                 self.msg[k]
= mailheader[k]
        
# 创建纯文本部分
         body_plain = email.MIMEText.MIMEText(maildata[0], _subtype = ' plain ' , _charset = ' gb2312 ' )
         body_html
= None
        
# 创建html部分,这个是可选的
         if maildata[ 1 ]:
             body_html
= email.MIMEText.MIMEText(maildata[ 1 ], _subtype = ' html ' , _charset = ' gb2312 ' )
        
        
        
# 创建一个multipart, 然后把前面的文本部分和html部分都附加到上面,至于为什么,可以看看mime相关内容
         attach = email.MIMEMultipart.MIMEMultipart()
         attach.attach(body_plain)
        
if body_html:
             attach.attach(body_html)
        
# 处理每一个附件
         for fname in mailattachlist:
             attachment
= email.MIMEText.MIMEText(email.Encoders._bencode(open(fname, ' rb ' ).read()))
            
# 这里设置文件类型,全部都设置为Application.当然也可以是Image,Audio什么的,这里不管那么多
             attachment.replace_header( ' Content-type ' , ' Application/octet-stream;name=" ' + os.path.basename(fname) + ' " ' )
            
# 一定要把传输编码设置为base64,因为这里默认就是用的base64
             attachment.replace_header( ' Content-Transfer-Encoding ' , ' base64 ' )
             attachment.add_header(
' Content-Disposition ' , ' attachment;filename=" ' + os.path.basename(fname) + ' " ' )
             attach.attach(attachment)
        
# 生成最终的邮件            
         self.mail = self.msg.as_string()[: - 1 ] + attach.as_string()
        
        
return self.mail

if __name__ == ' __main__ ' :
     mc
= MailCreator()
     header
= { ' from ' : ' zhaowei@163.com ' , ' to ' : ' weizhao@163.com ' , ' subject ' : ' 我的一个测试邮件 ' }
     data
= [ ' plain text information ' , ' <font color="red">html text information</font> ' ]
    
if sys.platform == ' win32 ' :
         attach
= [ ' c:\windows\clock.avi ' ]
    
else :
         attach
= [ ' /bin/cp ' ]
    
     mail
= mc.create(header, data, attach)
    
     f
= open( " test.eml " , " wb " )
     f.write(mail)
     f.close()

这里我自己封装了一个类来做处理,大体的过程就是:
1. 先创建message对象: email.Message.Message()
2. 创建MIMEMultipart对象:email.MIMEMultipart.MIMEMultipart()
3. 创建各个MIMEText对象,并把他们attach到MIMEMultipart里,这里的MIMEText其实不仅仅是text, 也包括image, application, audio等等。
4. 生成最终邮件。

python模块之email: 电子邮件编码解码 (二、编码邮件) 用email模块来生成邮件也是很简单的,只是需要一些mime的基础知识。下面看看一点mime基础。MIME消息由消息头和消息体两大部分组成,在邮件里就是邮件头和邮件体。邮件头与邮件体之间以空行进行分隔。这点可以用文本编辑器(比如记事本)查看一个邮件的源文件就可以清除看到。outlook和foxmail自己就有查看源文件的功能。  邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型 阅读详情

相关推荐

python_email.rar

一个封装好的使用python发送邮件的模块,可以发送html、图片、附件等,同时发送至多个收件人和抄送人。

使用python自带的email模块解析邮件

着重演示解析邮件内容过程中的基本实现方法

阿猪的博客 1万+

ARM双核锁步DCLS Lockstep技术研究(FPGA实现)

基于《Applying Dual-Core Lockstep in Embedded Processors to Mitigate Radiation-induced Soft Errors》文章总结 RISC-V双核锁步DCLS Lockstep技术参考之前文章: RISC-V双核锁步DCLS Lockstep技术总结_远古架构师alanwu的博客-优快云博客https://blog.youkuaiyun.com/heyuming20062007/article/details/123329537ARM+RIS

heyuming20062007的博客 8727

python内置模块smtplib、email 发送电子邮件

smtplib 是 Python 的标准库之一,用于发送电子邮件。它提供了一个简单的接口来连接到 SMTP(Simple Mail Transfer Protocol)服务器,并通过该服务器发送电子邮件。email 是 Python 的标准库之一,用于处理电子邮件相关的操作。它提供了一组类和方法,用于创建、解析和操作电子邮件消息。

老衲爱洗头的博客 2084

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

自定义LayoutManager实现android-pile-layout滑动卡片堆叠效果

这是我的第一篇博客,总算有个契机开始写博客了,就从自定义LayoutManager开始吧。 前段时间看到一个项目(android-pile-layout),效果特别不错,这是效果图: 效果确实不错,我看了下实现,是用的自定义的ViewGroup实现的,计算什么还搞的挺复杂的,具体的没细看。作者说也尝试过用LayoutManager实现,但是没找到合适的数学模型,好吧,看到数学模型我

u014296305的博客 1万+

python发送各类QQ邮件 —— smtplib与email模块

SMTP是发送邮件的协议,Python 2.3版本开始内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。本文以QQ邮件为例,用python发送各类邮件。 Python对SMTP支持主要使用smtplib和email两个模块,email模块负责构造邮件,smtplib模块负责发送邮件。 一、 传输简单邮件 smtplib模块 1. SMTP类定义 smtplib.SMTP([host[,port[,local_hostname[,timeout]]]]) 作为SMTP的构

Hehuyi_In的博客 1万+

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6489

Python——email模块

python-email发送文件

田地里的大麦子 6305

【机器人技术基础】MATLAB Robotics Toolbox PUMA560 运动学正逆解

机器人技术基础实验2报告 1. 实验目的和要求 2. 实验手段 2.1 实验原理 2.2 函数详解 3. 实验主要内容 4. 实验结果和分析 4.1 正运动学求解 例1 例2 4.2 逆运动学求解 例1 例2 1. 实验目的和要求 掌握常见形式的机器人的D-H坐标系建立方法、运动学建模; 正逆运动学分析与求解; 使用Robotics Toolbox对直角坐标机器人、圆柱坐标机器人、球坐标机器人、PUMA560其中之一建立运动学模型,正逆求解和仿真。 2. 实验手段 2.1

【人工智障 | 计算鸡视觉 | 机器孩】 1万+

从零训练Qwen3-VL

如果你未来想做的是「在公开权重上继续做大规模多模态 pretrain(比如换数据、换目标函数)」而不是在完全随机初始化上起步,这两类代码会比 Open-Qwen2VL 更直接。参考 Qwen2-VL / Qwen2.5-VL 披露的流程,可以大致推测 Qwen3-VL 也是类似的三阶段:(直接在学术算力(8×A100-40G)上从零预训练了一个 2B 参数的多模态 Qwen2-VL 风格模型:(的配置和训练脚本,理解它是如何把「任意 ViT + 任意 LLM + 任意图文数据」拼在一起的。

u013250861的博客 563

python文本编码转换_python模块之email: 电子邮件编码解码(转)

http://blog.youkuaiyun.com/zhaoweikid/archive/2007/06/01/1634766.aspxpython自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:Received: from 192.168.208.56 ( 192.168.2...

weixin_39862847的博客 637

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 315

python模块之email: 电子邮件编码解码(转)

出处:[url]http://blog.youkuaiyun.com/zhaoweikid/archive/2007/06/01/1634766.aspx[/url] python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。 处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件: Received: from 192....

pythoner的专栏 1287

STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统

在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为

weixin_42103128的博客 156

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python模块之email: 电子邮件编码解码 (一、解码邮件)

    python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.56] ) by ajax-webmail-wmsvr37 (Coremail)

zhaowei的专栏 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)

python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.56] ) byajax-webmail-wmsvr37 (Coremail) ; Th...

weixin_39545017的博客 2306

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python email模块详解_Python使用email模块对邮件进行编码和解码的实例教程

解码邮件python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.56] ) byajax-webmail-wmsvr37 (Coremail) ...

weixin_39836530的博客 1678

python模块之email: 电子邮件编码解码 (一、解码邮件)

python模块之email: 电子邮件编码解码 (一、解码邮件) python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。 处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件: Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.5

wrchow的专栏 2597

python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)-阿里云开发者社区...

python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.56] ) byajax-webmail-wmsvr37 (Coremail) ; Th...

weixin_39551188的博客 284
上一篇: python模块之poplib: 用pop3收取邮件
下一篇: 用iconv做通用的语言编码转换(转)
pythoner
博客等级 码龄18年 15粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值