Python自动化发送邮件:让重复邮件发送一键搞定

张开发
2026/4/10 13:52:16 15 分钟阅读

分享文章

Python自动化发送邮件:让重复邮件发送一键搞定
前言职场中你是不是经常需要定期给客户、领导或团队成员发送类似的邮件周报、月报、数据汇总、节日祝福…每次都要手动填写收件人、复制粘贴内容繁琐又容易出错。今天教你用Python写一个自动发邮件脚本一劳永逸解决这个痛点实战场景每周五自动给团队发送周报汇总每月初给客户发送上月数据报告定时给员工发送会议提醒或节日祝福自动化监控告警邮件发送核心实现准备工作首先安装邮件发送依赖pipinstallyagmail基础版本发送文本邮件importyagmailfromdatetimeimportdatetimeclassAutoMailSender:自动化邮件发送器def__init__(self,sender_email,sender_password,smtp_serversmtp.qq.com,smtp_port465): 初始化邮件发送器 Args: sender_email: 发件人邮箱 sender_password: 邮箱授权码非登录密码 smtp_server: SMTP服务器地址 smtp_port: SMTP端口 self.yagyagmail.SMTP(usersender_email,passwordsender_password,hostsmtp_server,portsmtp_port)defsend_text_email(self,to_emails,subject,content): 发送文本邮件 Args: to_emails: 收件人列表支持单个字符串或列表 subject: 邮件主题 content: 邮件正文 try:self.yag.send(toto_emails,subjectsubject,contentscontent)print(f✓ 邮件发送成功主题{subject})returnTrueexceptExceptionase:print(f✗ 邮件发送失败{e})returnFalsedefsend_html_email(self,to_emails,subject,html_content):发送HTML格式邮件try:self.yag.send(toto_emails,subjectsubject,contentshtml_content)print(f✓ HTML邮件发送成功)returnTrueexceptExceptionase:print(f✗ HTML邮件发送失败{e})returnFalse# 使用示例if__name____main__:# 初始化替换为你的邮箱和授权码mail_senderAutoMailSender(sender_emailyour_emailqq.com,sender_passwordyour_auth_code# QQ邮箱授权码在设置-账户里获取)# 发送简单邮件mail_sender.send_text_email(to_emails[colleaguecompany.com,bosscompany.com],subject【周报】2026年第14周工作汇总,content 各位同事周五好 本周工作汇总如下 1. 完成项目A的需求分析 2. 修复了3个线上bug 3. 优化了数据库查询性能 4. 编写了两份技术文档 下周计划 - 开始项目B的开发工作 - 继续优化系统性能 如有问题随时沟通~ )进阶版本发送带附件的邮件defsend_email_with_attachments(self,to_emails,subject,content,attachmentsNone): 发送带附件的邮件 Args: to_emails: 收件人列表 subject: 邮件主题 content: 邮件正文 attachments: 附件路径列表如 [./report.pdf, ./data.xlsx] try:self.yag.send(toto_emails,subjectsubject,contentscontent,attachmentsattachments)print(f✓ 带附件邮件发送成功附件{attachments})returnTrueexceptExceptionase:print(f✗ 带附件邮件发送失败{e})returnFalse# 使用示例发送月报并附带Excelmail_sender.send_email_with_attachments(to_emailsmanagercompany.com,subject【月报】2026年3月销售数据,content经理好本月销售数据报告见附件请查收,attachments[./reports/sales_report_202603.xlsx])高级版本自动生成HTML邮件模板defgenerate_html_report(project_name,metrics,issues): 生成HTML格式的数据报告邮件 Args: project_name: 项目名称 metrics: 数据指标字典 issues: 问题列表 # 构建HTML表格行metric_rowsforkey,valueinmetrics.items():metric_rowsftrtd{key}/tdtd{value}/td/tr# 构建问题列表issue_list.join([fli{issue}/liforissueinissues])htmlf html body stylefont-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; h2 stylecolor: #2c3e50;{project_name}- 数据周报/h2 p stylecolor: #7f8c8d;报告日期{datetime.now().strftime(%Y年%m月%d日)}/p h3 stylecolor: #34495e; 关键指标/h3 table stylewidth: 100%; border-collapse: collapse; margin-bottom: 20px; tr stylebackground-color: #3498db; color: white; th stylepadding: 10px; text-align: left;指标/th th stylepadding: 10px; text-align: right;数值/th /tr{metric_rows}/table h3 stylecolor: #34495e;⚠️ 待处理问题/h3 ul stylecolor: #e74c3c;{issue_list}/ul hr styleborder: none; border-top: 1px solid #ecf0f1; p stylecolor: #95a5a6; font-size: 12px;此邮件由自动化脚本发送请勿直接回复。/p /body /html returnhtml# 使用示例mail_sender.send_html_email(to_emailsteamcompany.com,subject【周报】系统监控数据汇总,contentgenerate_html_report(project_name用户中心系统,metrics{日活用户:12,345,API调用量:1,234,567,平均响应时间:45ms,系统可用率:99.95%},issues[服务器CPU使用率偏高需关注,部分接口响应时间波动较大]))定时自动发送配置结合系统定时任务Windows任务计划程序/Linux cron可以实现自动化# 每周五下午5点自动发送周报if__name____main__:fromdatetimeimportdatetimeimportscheduleimporttimedefweekly_report_job():每周五执行的周报任务ifdatetime.now().weekday()4:# 周五mail_senderAutoMailSender(your_emailqq.com,your_auth_code)mail_sender.send_text_email(to_emailsteamcompany.com,subjectf【周报】{datetime.now().strftime(%Y年第W周)},content自动生成的周报内容...)# 每分钟检查一次实际使用时改为更长的间隔schedule.every().friday.at(17:00).do(weekly_report_job)whileTrue:schedule.run_pending()time.sleep(60)注意事项授权码获取QQ邮箱需要在设置→账户中开启SMTP服务并获取授权码发送频率合理控制发送频率避免被判定为垃圾邮件收件人验证正式发送前用测试账号验证邮件格式错误处理添加日志记录方便排查发送失败的原因总结这个自动发邮件脚本特别适合需要定期发送类似内容邮件的办公场景监控系统告警通知数据报告自动汇总推送代码量不大但能省去大量重复性的复制粘贴工作。赶紧试试吧

更多文章