使用Python zmail库自动化发送邮件:从基础到复杂场景

小林子
小林子
发布时间:2026-10-12| 2人浏览过
原创

本文介绍如何利用Python的zmail库实现自动化邮件发送。内容涵盖基础单发、多收件人、抄送、附件处理及HTML格式化正文。通过具体代码示例,展示如何配置SMTP服务器、处理授权码以及调用外部API生成动态内容,帮助开发者快速构建邮件通知系统。

使用 zmail 库实现自动化邮件发送

在Python开发中,自动化发送邮件是常见的运维和通知需求。相比于标准库 smtplib,zmail 模块提供了更简洁的接口,允许开发者用极少的代码完成邮件构建与发送。本文将通过不同场景的代码示例,解析如何配置服务器、处理收件人、添加附件以及格式化正文。

基础配置与单发示例

发送一封最基础的邮件,核心在于提供邮箱账号、密码(或授权码)以及收件人地址。对于QQ邮箱等主流服务商,通常需要在网页端开启SMTP服务并获取专用密码。若使用企业邮箱(如示例中的263企业邮),可能需要显式指定 smtp_host 和 smtp_port 参数。

import zmail
# 基础单发示例
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',{'subject':'我是你的舔狗1号'})

若需指定特定的SMTP服务器地址和端口,可添加相应参数:

import zmail
# 指定SMTP服务器和端口
zmail.server('danzhao@sunlands.com','password',smtp_host='smtp.263.net',smtp_port=25).send_mail('danzhao@sunlands.com',{'subject':'我是你的舔狗1号'})

多收件人与外显名设置

当需要向多个收件人发送邮件,或希望收件人看到特定的发件人名称(外显名)时,收件人参数应改为列表形式。列表中每个元素可以是元组,包含显示名称和邮箱地址。

import zmail
# 设置外显名和多收件人
zmail.server('danzhao@sunlands.com','password').send_mail([('女神','danzhao@sunlands.com')],{'subject':'我是你的舔狗1号'})

动态内容生成与API调用

邮件主题或正文可以动态生成。例如,通过调用外部API获取随机文本,并将其作为邮件主题发送。以下示例展示了如何结合 requests 库获取数据并发送:

import requests
import json
import zmail
response = requests.get('https://api.uomg.com/api/rand.qinghua')
tiangou = json.loads(response.text)['content']
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',{'subject':tiangou})

邮件正文格式化:纯文本与HTML

对于报表类邮件,清晰的格式至关重要。zmail 支持纯文本(content_text)和HTML(content_html)两种正文格式。HTML格式允许使用加粗、颜色等样式,提升可读性。

纯文本正文

import zmail
mail = dict(
	subject='今日数据情况',
	content_text='今日新录入名片100张,有效添加50张,添加率为50%'
)
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',mail)

HTML格式化正文

在HTML正文中,可以使用HTML标签(如 <strong>)对关键数据进行加粗处理:

import zmail
mail = dict(
	subject='今日数据情况',
	content_html='今日新录入名片100张,有效添加50张,添加率为<strong>50%</strong>'
)
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',mail)

抄送与附件处理

实际业务中,邮件常需抄送相关人员或附带报表文件。以下示例展示了如何添加抄送人(cc)和附件(attachments)。

添加抄送人

import zmail
mail = dict(
	subject='今日数据情况',
	content_text='今日新录入名片100张,有效添加50张,添加率为50%'
)
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',mail,cc='chenxiaomei@sunlands.com')

添加单个附件

使用 attachments 参数指定文件路径。注意路径格式,Windows下建议使用原始字符串(r'...'):

import zmail
mail = dict(
	subject='今日数据情况',
	content_text='今日新录入名片100张,有效添加50张,添加率为50%.各组详情请见附件',
	attachments=r'E:\Onedrive\桌面\报表.xlsx'
)
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',mail)

添加多个附件

若需发送多个附件,attachments 参数应传入文件路径列表:

import zmail
mail = dict(
	subject='今日数据情况',
	content_text='今日新录入名片100张,有效添加50张,添加率为50%.各组详情请见附件报表2',
	attachments=[r'E:\Onedrive\桌面\报表1.xlsx',r'E:\Onedrive\桌面\报表2.xlsx']
)
zmail.server('danzhao@sunlands.com','password').send_mail('danzhao@sunlands.com',mail)

注意事项与排错建议

  • 授权码配置:QQ邮箱等服务商通常要求使用“授权码”而非登录密码,需在邮箱设置中开启SMTP服务。
  • 服务器地址:非默认服务商(如企业邮)需正确配置 smtp_host 和 smtp_port。
  • 路径格式:Windows文件路径建议使用原始字符串(r'...')以避免转义字符问题。
  • HTML转义:在纯文本中嵌入HTML标签时,确保标签正确闭合,否则可能导致格式错乱。

以上就是使用Python zmail库实现自动发邮件的详细内容,更多关于Python邮件自动化、zmail库用法及附件处理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。