it编程 > 前端脚本 > Python

Python标准库中email模块的使用方法与内部机制详解

9人参与 2025-06-11 Python

一、什么是 email 模块?

email 是 python 内置的标准库,用于构建或解析符合 rfc 5322 标准的电子邮件。该模块支持:

该模块最早出现在 python 2.2,经过多次迭代,在 python 3 中已高度模块化和现代化,使用更加清晰直观。

二、模块结构与核心组件

python 的 email 库结构如下:

三、构建电子邮件

3.1 创建纯文本邮件

from email.message import emailmessage

msg = emailmessage()
msg['subject'] = '测试邮件'
msg['from'] = 'sender@example.com'
msg['to'] = 'receiver@example.com'
msg.set_content('这是纯文本邮件内容')

print(msg.as_string())

3.2 创建 html 邮件

msg = emailmessage()
msg['subject'] = 'html 邮件'
msg['from'] = 'sender@example.com'
msg['to'] = 'receiver@example.com'

msg.set_content('这是纯文本备用内容')
msg.add_alternative("""
<html>
  <body>
    <h1 style="color:blue">这是一封 html 邮件</h1>
  </body>
</html>
""", subtype='html')

3.3 添加附件

with open('demo.pdf', 'rb') as f:
    file_data = f.read()
    file_name = f.name

msg.add_attachment(file_data, maintype='application', subtype='pdf', filename=file_name)

四、解析电子邮件

email 支持将原始邮件(如 .eml 文件)解析成结构化对象:

4.1 解析原始邮件内容

from email import policy
from email.parser import bytesparser

with open('sample.eml', 'rb') as f:
    msg = bytesparser(policy=policy.default).parse(f)

print('subject:', msg['subject'])
print('from:', msg['from'])
print('to:', msg['to'])

4.2 遍历多部分邮件内容

if msg.is_multipart():
    for part in msg.iter_parts():
        content_type = part.get_content_type()
        content = part.get_content()
        print(f'part: {content_type}\ncontent:\n{content}\n')
else:
    print(msg.get_content())

五、常见 mime 类型

类型说明
text/plain纯文本邮件
text/htmlhtml 邮件
multipart/mixed多部分邮件,通常包含附件
multipart/alternative文本 + html 备用格式
application/octet-stream任意二进制附件
image/jpeg / image/png嵌入图像

你可以使用 email.mime.* 中的各类构造器快速创建这些类型:

from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.mime.application import mimeapplication

六、与 smtplib 联合发送邮件

虽然 email 负责构建邮件,但实际发送需要结合 smtplib

import smtplib

with smtplib.smtp_ssl('smtp.example.com', 465) as smtp:
    smtp.login('user@example.com', 'password')
    smtp.send_message(msg)

七、常用工具函数(email.utils)

from email.utils import parseaddr, formataddr, format_datetime
from datetime import datetime, timezone

name, email = parseaddr("小明 <xiaoming@example.com>")
print(name, email)

# 格式化地址
print(formataddr(("测试人", "test@example.com")))

# 格式化时间为邮件头格式
print(format_datetime(datetime.now(timezone.utc)))

八、完整示例:发送带附件的 html 邮件

from email.message import emailmessage
import smtplib

msg = emailmessage()
msg['subject'] = '周报'
msg['from'] = 'sender@example.com'
msg['to'] = 'receiver@example.com'

# 添加 html 正文
msg.set_content('请查看 html 格式邮件')
msg.add_alternative("""
<html>
  <body>
    <p>您好,</p>
    <p>这是本周的周报,请查收附件。</p>
  </body>
</html>
""", subtype='html')

# 添加附件
with open('report.pdf', 'rb') as f:
    msg.add_attachment(f.read(), maintype='application', subtype='pdf', filename='report.pdf')

# 发送邮件
with smtplib.smtp_ssl('smtp.example.com', 465) as smtp:
    smtp.login('sender@example.com', 'password')
    smtp.send_message(msg)

九、调试技巧

十、总结

python 的 email 模块功能强大、标准化程度高,适合处理各种邮件构建与解析任务。掌握它不仅可以让你自动化报告发送、实现客服回复系统、构建邮件网关,还能与 smtp/imap/pop3 模块联动开发出邮件相关应用。

以上就是python标准库中email模块的使用方法与内部机制详解的详细内容,更多关于python email模块使用方法的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Python使用glob库批量匹配文件路径

06-11

Python使用sort()方法对数组进行排序的操作指南

06-11

Python中dict遍历的方法详解

06-11

Python编写邮件自动发送工具的完整指南

06-11

Python主动抛出异常的各种用法和场景分析

06-11

基于Python实现图片格式批量转换器

06-11

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论