Python 自动化办公:批量发送邮件原来这么简单
·
Python 自动化办公:批量发送邮件原来这么简单
在日常办公中,批量发送邮件(如通知、报告)是常见需求。使用Python,只需几行代码就能实现自动化,大大节省时间。下面我将一步步解释如何实现,并提供完整代码示例。整个过程基于Python标准库(smtplib和email),无需额外安装包,确保真实可靠。
为什么这么简单?
- Python的
smtplib库封装了SMTP协议,简化了邮件发送。 email库帮助构建邮件内容。- 批量发送本质是循环处理收件人列表,效率高(例如发送$n$封邮件只需$O(n)$时间)。
分步实现
假设场景:你需要向多个同事发送相同的通知邮件。收件人列表存储在CSV文件中(如recipients.csv),每行一个邮箱地址。
-
准备环境
首先,确保Python已安装(推荐Python 3.6+)。导入必要库:import smtplib from email.mime.text import MIMEText import csv # 用于读取收件人文件 -
设置SMTP服务器
使用你的邮箱服务商(如Gmail、QQ邮箱)的SMTP信息。例如,Gmail的设置:- 服务器:
smtp.gmail.com - 端口:587(TLS加密)
- 用户名:你的邮箱地址
- 密码:邮箱密码或应用专用密码(安全起见,不要硬编码在代码中)
安全提示:密码应通过环境变量或输入获取。这里用
input()函数动态输入。 - 服务器:
-
构建邮件内容
创建邮件主题和正文。使用MIMEText对象封装内容:subject = "重要通知:本周会议安排" # 邮件主题 body = "您好,本周五下午2点将举行团队会议,请准时参加。如有疑问,请联系管理员。" # 邮件正文 msg = MIMEText(body, 'plain', 'utf-8') # 'plain'表示纯文本,'utf-8'支持中文 msg['Subject'] = subject msg['From'] = 'your_email@example.com' # 替换为你的发件邮箱 -
读取收件人列表
假设收件人文件recipients.csv格式如下:email colleague1@example.com colleague2@example.com ...使用
csv模块读取:recipient_list = [] with open('recipients.csv', 'r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: recipient_list.append(row['email']) # 提取邮箱地址 -
循环发送邮件
连接SMTP服务器,遍历收件人列表发送。注意:每次发送需设置msg['To']。# 获取SMTP凭据(安全方式) smtp_server = input("输入SMTP服务器地址(如 smtp.gmail.com): ") smtp_port = int(input("输入SMTP端口(如 587): ")) username = input("输入邮箱用户名: ") password = input("输入邮箱密码: ") # 实际运行时密码不会显示 # 发送邮件 try: with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() # 启用TLS加密 server.login(username, password) for recipient in recipient_list: msg['To'] = recipient # 设置当前收件人 server.sendmail(msg['From'], recipient, msg.as_string()) print(f"邮件发送成功至: {recipient}") print("批量发送完成!") except Exception as e: print(f"发送失败,错误: {e}")
完整代码示例
将以上步骤整合成一个脚本batch_email.py:
import smtplib
from email.mime.text import MIMEText
import csv
# 设置邮件内容
subject = "重要通知:本周会议安排"
body = "您好,本周五下午2点将举行团队会议,请准时参加。如有疑问,请联系管理员。"
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = 'your_email@example.com' # 替换为你的邮箱
# 读取收件人列表
recipient_list = []
try:
with open('recipients.csv', 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
recipient_list.append(row['email'])
except FileNotFoundError:
print("错误:收件人文件不存在!")
exit()
# 获取SMTP信息(安全输入)
smtp_server = input("输入SMTP服务器地址(如 smtp.gmail.com): ")
smtp_port = int(input("输入SMTP端口(如 587): "))
username = input("输入邮箱用户名: ")
password = input("输入邮箱密码: ")
# 批量发送
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(username, password)
for recipient in recipient_list:
msg['To'] = recipient
server.sendmail(msg['From'], recipient, msg.as_string())
print(f"邮件发送成功至: {recipient}")
print(f"所有邮件发送完毕!共发送{len(recipient_list)}封。") # 使用$n$表示数量
except smtplib.SMTPException as e:
print(f"SMTP错误: {e}")
except Exception as e:
print(f"未知错误: {e}")
注意事项
- 测试建议:先用自己的邮箱测试,避免触发反垃圾邮件机制。发送量过大时(如超过100封/小时),分批发送或添加延迟。
- 扩展功能:如需发送HTML邮件或附件,使用
MIMEMultipart和MIMEBase(修改msg对象)。 - 安全第一:永远不要将密码存储在脚本中。生产环境建议使用OAuth2或密钥管理服务。
- 效率:对于$n$个收件人,发送时间约$O(n)$,取决于网络速度。
通过这个示例,你可以看到Python自动化批量邮件的简洁性:只需基础代码,就能处理重复任务。赶紧试试吧,让你的办公效率翻倍!如果有具体问题,欢迎进一步讨论。
更多推荐



所有评论(0)