python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python email模块使用方法

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

作者:萧鼎

在 Python 中处理电子邮件时,标准库中的 email 模块是首选工具,无论你需要发送 HTML 格式的邮件、带附件的邮件,还是解析复杂的邮件结构,email 库都能胜任,这篇博客将带你系统地认识并掌握 email 模块的使用方法与内部机制,需要的朋友可以参考下

一、什么是 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模块使用方法的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文