当前位置: 首页 > news >正文

Python之email包语法、参数和实际应用案例

Python email 包完整使用指南(功能+安装+语法+8大案例+避坑指南)

Python 内置的email是专门用于构建、解析、处理电子邮件的标准库,无需依赖第三方工具即可完成邮件的纯文本/HTML/附件/图片嵌入等所有邮件格式操作,是邮件开发的核心工具。

注意:email只负责「构造/解析邮件内容」不负责「发送邮件」;发送邮件需要配合smtplib库(Python 内置)使用。


一、email 包核心功能总览

email包是 Python 标准库,无需额外安装,核心能力:

  1. 构建邮件:纯文本邮件、HTML 富文本邮件、带附件邮件、内嵌图片邮件
  2. 解析邮件:读取邮件内容、提取发件人/收件人/主题/附件/正文
  3. 编码处理:自动处理邮件标题、附件的中文编码(解决乱码)
  4. 格式兼容:支持标准 RFC 5322 邮件格式,兼容所有邮箱

核心子模块(必须掌握)

模块作用
email.mime.text.MIMEText构建纯文本/HTML邮件正文
email.mime.multipart.MIMEMultipart构建复合邮件(正文+附件+图片)
email.mime.image.MIMEImage构建内嵌图片邮件
email.mime.base.MIMEBase通用附件封装类
email.utils工具函数(格式化日期、解析邮箱地址)
email.header处理邮件标题中文编码

二、安装说明

emailPython 内置标准库Python 3.3+ 版本自带,直接导入使用即可:

# 直接导入,无需 pip 安装importemailfromemail.mime.textimportMIMEText

✅ 验证:终端输入python -c "import email; print(email.__version__)"无报错即正常。


三、核心语法与参数详解

1. MIMEText(文本/HTML 邮件)

语法

MIMEText(_text,_subtype='plain',_charset=None)

参数

  • _text:邮件正文内容(字符串)
  • _subtype:邮件类型
    • plain→ 纯文本邮件
    • html→ HTML 富文本邮件
  • _charset:编码格式(必须设为 utf-8,解决中文乱码)

2. MIMEMultipart(复合邮件)

语法

MIMEMultipart(_subtype='mixed',**kwargs)

参数

  • _subtype:复合类型
    • mixed:默认值,包含附件+正文
    • related:包含内嵌图片
    • alternative:纯文本+HTML 兼容

核心方法

  • attach(对象):将正文、附件、图片添加到邮件中

3. 邮件通用属性(所有邮件对象通用)

msg['From']='发件人昵称 <发件人邮箱>'# 发件人msg['To']='收件人1,收件人2'# 收件人(多个用逗号分隔)msg['Subject']='邮件标题'# 标题msg['Cc']='抄送人邮箱'# 抄送msg['Bcc']='密送人邮箱'# 密送

四、8 个实际应用案例(可直接复制运行)

所有案例都配合smtplib实现构造+发送完整流程,以QQ邮箱为例(需开启 SMTP 服务)。

前置配置(所有案例通用)

importsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipart# 邮箱配置SMTP_SERVER='smtp.qq.com'# QQ邮箱SMTP服务器SMTP_PORT=465# SSL端口SENDER_EMAIL='你的QQ邮箱'SENDER_PASSWORD='邮箱授权码'# 非登录密码,需在邮箱开启SMTP获取

案例1:发送纯文本邮件(最简单)

# 1. 构建纯文本邮件msg=MIMEText('这是一封Python自动发送的纯文本邮件','plain','utf-8')# 2. 设置邮件头信息msg['From']=SENDER_EMAIL msg['To']='收件人邮箱'msg['Subject']='纯文本邮件测试'# 3. 发送邮件withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.send_message(msg)print("纯文本邮件发送成功!")

案例2:发送 HTML 富文本邮件(带样式/链接/表格)

# HTML 正文(支持样式、链接、表格、字体颜色)html_content=""" <h2 style="color:blue">Python HTML 邮件</h2> <p>这是<b>加粗</b>文字,<a href="https://www.baidu.com">点击跳转</a></p> <table border="1"> <tr><th>姓名</th><th>年龄</th></tr> <tr><td>张三</td><td>25</td></tr> </table> """# 构建HTML邮件msg=MIMEText(html_content,'html','utf-8')msg['From']=SENDER_EMAIL msg['To']='收件人邮箱'msg['Subject']='HTML富文本邮件'# 发送withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.send_message(msg)print("HTML邮件发送成功!")

案例3:发送带附件的邮件(文档/图片/压缩包)

fromemail.mime.baseimportMIMEBasefromemailimportencodersimportos# 1. 创建复合邮件对象msg=MIMEMultipart()msg['From']=SENDER_EMAIL msg['To']='收件人邮箱'msg['Subject']='带附件的邮件'# 2. 添加正文body=MIMEText('这是带附件的邮件,请查收附件!','plain','utf-8')msg.attach(body)# 3. 添加附件(支持任意文件:txt/pdf/excel/zip/jpg 等)file_path='test.pdf'# 你的附件路径file_name=os.path.basename(file_path)# 读取并编码附件withopen(file_path,'rb')asf:mime=MIMEBase('application','octet-stream')mime.set_payload(f.read())encoders.encode_base64(mime)# 设置附件文件名(解决中文附件名乱码)mime.add_header('Content-Disposition','attachment',filename=file_name)msg.attach(mime)# 发送withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.send_message(msg)print("带附件邮件发送成功!")

案例4:发送内嵌图片邮件(图片显示在正文,非附件)

fromemail.mime.imageimportMIMEImage# 1. 创建复合邮件(related 用于内嵌资源)msg=MIMEMultipart('related')msg['From']=SENDER_EMAIL msg['To']='收件人邮箱'msg['Subject']='内嵌图片邮件'# 2. HTML 正文(通过 cid:xxx 引用图片)html=""" <p>这是内嵌图片:</p> <img src="cid:my_image"> <!-- cid 必须和图片ID对应 --> """msg.attach(MIMEText(html,'html','utf-8'))# 3. 添加图片并设置IDwithopen('image.jpg','rb')asf:img=MIMEImage(f.read())img.add_header('Content-ID','<my_image>')# ID 对应 HTML 中的 cid:my_imagemsg.attach(img)# 发送withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.send_message(msg)print("内嵌图片邮件发送成功!")

案例5:批量发送邮件(群发)

# 收件人列表receiver_list=['user1@qq.com','user2@163.com','user3@gmail.com']# 构建邮件msg=MIMEText('批量发送测试邮件','plain','utf-8')msg['From']=SENDER_EMAIL msg['To']=', '.join(receiver_list)# 多个收件人用逗号拼接msg['Subject']='Python批量邮件'# 发送withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.sendmail(SENDER_EMAIL,receiver_list,msg.as_string())print(f"批量发送给{len(receiver_list)}人成功!")

案例6:发送带抄送/密送的邮件

msg=MIMEText('抄送+密送测试邮件','plain','utf-8')msg['From']=SENDER_EMAIL msg['To']='主收件人邮箱'msg['Cc']='抄送人1@qq.com,抄送人2@163.com'# 抄送(可见)msg['Bcc']='密送人@gmail.com'# 密送(不可见)msg['Subject']='带抄送密送的邮件'# 发送(必须包含所有收件人:主送+抄送+密送)all_receivers=[msg['To'],msg['Cc'],msg['Bcc']]withsmtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)asserver:server.login(SENDER_EMAIL,SENDER_PASSWORD)server.sendmail(SENDER_EMAIL,all_receivers,msg.as_string())print("带抄送密送邮件发送成功!")

案例7:解析本地邮件文件(.eml)

# 读取本地 eml 邮件文件并解析withopen('email.eml','r',encoding='utf-8')asf:importemail msg=email.message_from_file(f)# 提取邮件信息print('发件人:',msg.get('From'))print('收件人:',msg.get('To'))print('主题:',msg.get('Subject'))# 提取正文forpartinmsg.walk():ifpart.get_content_type()=='text/plain':print('正文:',part.get_payload(decode=True).decode('utf-8'))

案例8:自动提取邮件附件并保存

importemailimportos# 解析 eml 文件并保存附件withopen('email.eml','rb')asf:msg=email.message_from_bytes(f.read())# 遍历邮件内容forpartinmsg.walk():# 跳过正文,只处理附件ifpart.get_content_maintype()=='multipart':continueifpart.get('Content-Disposition')isNone:continue# 获取附件名并保存filename=part.get_filename()iffilename:withopen(filename,'wb')asf:f.write(part.get_payload(decode=True))print(f"附件{filename}保存成功!")

五、常见错误与解决方案

1. 中文乱码(标题/正文/附件)

原因:未设置utf-8编码
解决

  • 构建MIMEText时必须加_charset='utf-8'
  • 附件名用filename=filename直接赋值(Python3 自动编码)

2. SMTP 认证失败(登录错误)

原因:用了邮箱登录密码,而非授权码
解决

  • QQ/163/网易邮箱必须开启 SMTP 服务,使用授权码登录

3. 发送失败:550/554 错误

原因:邮件被判定为垃圾邮件
解决

  • 标题不要用「测试」「广告」等敏感词
  • 不要短时间高频发送
  • 发件人添加昵称

4. 附件无法打开

原因:附件读取模式错误
解决:附件必须用rb(二进制只读)模式读取

5. 内嵌图片不显示

原因Content-ID格式错误
解决:HTML 中用cid:xxx,图片头必须加<>Content-ID: <xxx>


六、使用注意事项(避坑必看)

  1. 区分 email 和 smtplib

    • email造邮件(内容、格式、附件)
    • smtplib发邮件(连接服务器、发送)
  2. 必须使用授权码,而非登录密码
    所有主流邮箱(QQ、163、Gmail、企业邮箱)都要求 SMTP 用授权码登录。

  3. 端口与协议

    • SSL 加密:端口465(推荐,smtplib.SMTP_SSL
    • 非加密:端口25(不推荐,易被拦截)
  4. 群发限制
    个人邮箱有群发限制(QQ 邮箱单次最多 50 人),大量发送需用企业邮箱/邮件服务。

  5. 编码统一
    全程使用utf-8,彻底避免中文乱码。

  6. 异常处理
    正式代码必须加try-except捕获发送异常:

    try:server.send_message(msg)exceptExceptionase:print(f"发送失败:{e}")

总结

  1. email是 Python内置标准库,专注邮件构造/解析,发送靠smtplib
  2. 核心类:MIMEText(文本)、MIMEMultipart(复合/附件)、MIMEImage(图片)
  3. 8 大案例覆盖纯文本、HTML、附件、内嵌图片、群发、抄送、解析、提取附件
  4. 避坑核心:用授权码、设 utf-8、正确处理附件二进制、规范邮件头

《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。

http://www.gsyq.cn/news/1440195.html

相关文章:

  • 市面上有哪些是真正无痕改写的降AIGC平台(顺利通过高校AIGC审核) - 降AI小能手
  • 2025_NIPS_ConDaFormer: Disassembled Transformer with Local Structure Enhancement for 3D Point Clo...
  • 深圳2026钻石回收优选,专业机构鉴真伪,不压价诚信经营 - 薛定谔的梨花猫
  • 视频链接提取下载有哪些工具推荐2026全场景适配电脑手机在线实操指南 - 科技热点发布
  • 轻松获取网页视频:猫抓浏览器插件的资源嗅探魔法
  • AI招聘实战:从简历智能筛选到全流程优化
  • 神经网络机器翻译:从编码器-解码器到Transformer的架构演进与应用实践
  • 2026年中国精密光学机械市场竞争力推荐品牌:显微成像与光路配套核心品牌深度解析 - 博客万
  • pgsql语法
  • Node-RED实战:用node-red-contrib-modbus节点快速读取RS485温湿度传感器数据
  • PHP与Redis缓存实践完整方案
  • 2026汇泉胶粉选购指南:纸品包装全场景裱纸胶粉权威推荐 - 速递信息
  • 如何彻底解决Switch手柄问题:Joy-Con Toolkit完整指南
  • 如何平衡CSP-J备赛与校内学习
  • MEMS 加速度计耳机敲击算法
  • 热点警示:毕业论文抽查力度加大,这8款AI毕业论文工具成毕业生“刚需” - 逢君学术-AI论文写作
  • 国内专业自闭症全托机构质量实测排行 核心维度对比 - 奔跑123
  • Docker和Kubernetes(K8s)的区别和联系
  • 2026年6月沈阳手表回收推荐:添价收综合服务稳定性更强 - 薛定谔的梨花猫
  • 2026年天津装修公司哪家口碑最好?深度测评:如何匹配最佳家装方案 - 资讯快报
  • 2026年黑龙江/哈尔滨本地门窗最新推荐榜单:厨房隔断、低碳环保、防寒保暖、防风抗压、恒温节能、极窄推拉门窗源头生产基地与工装配套之选 - 品牌企业推荐师(官方)
  • 终极Gofile下载指南:3分钟掌握高效文件获取技巧
  • KingbaseES-Windows单机实例运行机制与环境基线检查
  • 别再让VR角色穿模了!用XR Interaction Toolkit搞定CharacterController碰撞(Unity 2022 LTS实测)
  • 代理现货库存CYPD3175-24LQXQT高度集成USB Type-C PD端口控制器,综合性能优异、适配场景广,是快充电源领域的成熟方案。
  • 2026 南宁手表回收全攻略,添价收手表回收教你科学处理闲置名表 - 薛定谔的梨花猫
  • 用 ABAP CDS View 读取 SAP 表中每个采购订单行的最新记录
  • 学习C#调用OpenXml操作word文档的基本用法(39:学习表格类-1)
  • 如何轻松实现跨平台输入法词库迁移:深蓝词库转换终极指南
  • 2026年执行律师深度测评:如何为你的胜诉回款匹配最佳方案? - 资讯快报