使用Python zmail库自动化发送邮件:从基础到复杂场景
本文介绍如何利用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库用法及附件处理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













