本文主要是介绍Python办公自动化实战之打造智能邮件发送工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多...
前言
在数字化办公场景中,邮件自动化是提升工作效率的关键技能。本文将通过实际案例,演示如何使用python的smtplib和email库构建一个支持图文混排、多附件、多收件人的智能邮件系统。无需复杂配置,只需跟随步骤操作,即可实现邮件自动化发送。
一、基础配置:搭建邮件发送框架
1.1 邮箱服务准备
以163邮箱为例,首先需要开启SMTP服务:
- 登录邮箱后进入设置界面
- 选择"POP3/SMTP/IMAP"选项
- 开启SMTP服务并获取授权码(注意:授权码将替代登录密码使用)
1.2 核心库导入
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header
1.3 基础发送函数
def send_email(config): msg = MIMEMultipart() msg['From'] = config['sender'] msg['To'] = ', '.join(config['receivers']) msg['Subject'] = Header(config['subject'], 'utf-8') # 添加正文 msg.attach(MIMEText(config['body'], 'html', 'utf-8')) try: with smtplib.SMTP_SSL(config['smtp_server'], config['port']) as server: server.login(config['sender'], config['password']) server.sendmail(config['sender'], config['receivers'], msg.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败: {str(e)}")
二、进阶功能实现
2.1 多附件处理
def add_attachments(msg, file_paths):
for file_path in file_paths:
with open(file_path, 'rb') as f:
NKOHbOyVSf attachment = MIMEText(f.read(), 'base64', 'utf-8'php)
attachment['Content-Type'] = 'application/octet-stream'
attachment['Content-Disposition'] = f'attachment; filename="{file_path.split("/")[-1]}"'
msg.attach(attachment)
2.2 图文混排实现
def add_images(msg, image_paths): for img_path in image_paths: with open(img_path, 'rb') as f: img = MIMEImage(f.read()) img.add_header('Content-ID', f'<{img_path.split("/")[-1]}>') msg.attach(img)
2.3 多收件人优化
def validate_receivers(receivers): valid_emails = [] for email in receivers: if '@' in email and '.' in email.split('@')[1]: valid_emails.append(email) return valid_emails
三、完整实战案例
3.1 场景描述
某公司需要向全体员工发送季度工作报告,要求包含:
- PDF格式的正式报告
- 业绩趋势图(PNG格式)
- Excel格式的详细数据
- 邮件正文需要包含图表引用
3.2 完整代码实现
def main(): # 配置参数 config = { 'sender': 'your_email@163.com', 'password': '授权码', 'smtp_server': 'smtp.163.com', 'port': 465, 'receivers': ['test1@example.com', 'test2@example.com'], 'subject': '2025年第二季度工作报告', 'body': ''' <h1>季度工作报告</h1> <p>附件包含详细数据,正文图表如下:</p> <img src="cid:业绩趋势图.png"> ''' } # 创建邮件对象 msg = MIMEMultipart() msg['From'] = config['sender'] msg['To'] = ', '.join(config['receivers']) msg['Subject'] = Header(config['subject'], 'utf-8') # 添加正文 msg.attach(MIMEText(config['body'], 'html', 'utf-8php')) # 添加附件 add_attachments(msg, [ './reports/季度数据.xlsx', './reports/正式报告.pdf' ]) # 添加图片 add_images(msg, [ './charts/业绩趋势图.png' ]) # 发送邮件 send_email(config, msg) if __name__ == '__main__': main()
四、扩展功能建议
4.1 定时发送
结合schedule库实现定时任务:
import shttp://www.chinasem.cnchedule import time schedule.every().day.at("09:30").do(main) while True: schedule.run_pending() time.sleep(60)
4.2 批量发送
从CSV读取收件人信息:
import pandas as pd def BATch_send(csv_path): df = pd.read_csv(csv_path) for index, row in df.iterrows(): config['receivers'] = [row['email']] config['body'] = f"尊敬的{row['name']},这是您的专属报告" main()
4.3 异常处理
添加重试机制和日志记录:
import logging from retrying import retry logging.basicConfig(filename='email.log', level=logging.INFO) @retry(stop_max_attempt_number=3) def send_email_safe(config, msg): try: # 原有发送逻辑 logging.info(f"成功发送至{config['receivers']}") except Exception as e: logging.error(f"发送失败: {str(e)}") raise
五、注意事项
- 授权码安全:建议定期更换邮箱授权码
- 文件路径:使用绝对路径或相对路径时注意工作目录
- 邮件大小:单个邮件附件建议不超过20MB
- 测试验证:发送测试邮件时建议使用自己的邮箱作为收件人
- 服务器限制:部分邮箱服务器有每日发送量限制
通过本文介绍的方案,可以实现从简单邮件到复杂邮件的自动化发送。实际使用中可根据需求添加模板引擎、数据库集成等功能,构建更完善的邮件自动化系统。
以上就是Python办公自动化实战之打造智能邮件发送工具的详细内容,更多关于Python智能邮件发送的资料请关注China编程(www.chinasem.cn)其它相关文章!
这篇关于Python办公自动化实战之打造智能邮件发送工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!