9人参与 • 2025-06-11 • Python
email 是 python 内置的标准库,用于构建或解析符合 rfc 5322 标准的电子邮件。该模块支持:
该模块最早出现在 python 2.2,经过多次迭代,在 python 3 中已高度模块化和现代化,使用更加清晰直观。
python 的 email
库结构如下:
email.message
: 定义邮件的结构(如 emailmessage
类)。email.mime
: mime 类型构建工具包,如 mimetext
、mimeimage
、mimemultipart
。email.parser
: 用于解析原始邮件字符串为 message
对象。email.generator
: 用于将 message
对象生成字符串或写入文件。email.utils
: 提供通用工具函数,如地址解析、时间格式化等。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())
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')
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
文件)解析成结构化对象:
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'])
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())
类型 | 说明 |
---|---|
text/plain | 纯文本邮件 |
text/html | html 邮件 |
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
虽然 email
负责构建邮件,但实际发送需要结合 smtplib
:
import smtplib with smtplib.smtp_ssl('smtp.example.com', 465) as smtp: smtp.login('user@example.com', 'password') smtp.send_message(msg)
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)))
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模块使用方法的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论