[特殊字符] Excel 读取收件人 + Outlook 批量发送带附件邮件 —— Python 自动化实战

许多公司定期需要将不同部门或客户的报告发送给指定人员。手动操作容易出错、耗时且繁琐。今天这篇文章教你如何利用 Python 实现:

  • 🧩 从 Excel 中读取"收件人 + 抄送人 + 附件文件路径";

  • 📤 使用 win32com.client 调用 Outlook 自动生成并发送邮件;

  • ✅ 附加模板正文,并保持批量发送规范无需手工操作。


📥 从 Excel 中读取部门、收件人与附件路径

python 复制代码
from openpyxl import load_workbook

wb = load_workbook("邮件地址.xlsx")
ws = wb.active
address = {}
for i in range(2, ws.max_row + 1):
    dept = ws[f"A{i}"].value
    to_add = ws[f"B{i}"].value
    cc_add = ws[f"C{i}"].value
    address[dept] = [to_add, cc_add]
  • 使用 openpyxl 读取 Excel;

  • 构建键为 "部门名",值为 [收件人, 抄送人] 的字典,方便后续遍历映射。


✉️ 使用 Outlook 发送邮件函数封装

python 复制代码
import win32com.client as win32

def Send_mail(to_add, cc_add, file_path, dept):
    outlook = win32.Dispatch('Outlook.Application')
    mail = outlook.CreateItem(0)
    mail.To = to_add
    mail.CC = cc_add
    mail.Subject = f"{dept}年假情况"
    mail.Attachments.Add(file_path)
    mail.Body = (
        f"Dear All,\n这是{dept}的年假情况,请查收!谢谢。\n\n"
        "Best regards!\n人事部 小李"
    )
    mail.Send()
  • 借助 CreateItem(0) 新建邮件项目;

  • 设置收件人、抄送人、主题、正文与附件 (Medium, StackOverflow);

  • 使用 .Send() 方法发送,无需手动操作。


🔄 批量发邮件逻辑整合

python 复制代码
import os

for dept, (to_add, cc_add) in address.items():
    file_path = os.path.join(
        os.getcwd(),
        "年假_按部门",
        f"年假情况_{dept}.xlsx"
    )
    Send_mail(to_add, cc_add, file_path, dept)

print("邮件发送完成。")
  • 遍历 Excel 中所有部门;

  • 自动拼接附件路径,并调用 Send_mail()

  • 最后打印"邮件发送完成"。


🖼️ 结果展示区


✅ 小贴士 & 实用建议

  • Windows 必须安装 Outlook,且已登录账户,才能通过 win32com 正常发送 (StackOverflow);

  • 可设置 mail.SentOnBehalfOfName 指定发件人 (StackOverflow);

  • 若需要发送多个附件,可多次调用 mail.Attachments.Add(...)

  • 为防止安全警告,可使用 mail.Display(True) 手动确认后再发送;

  • 可加入异常处理逻辑,避免单个失败阻断整个批量流程。


⏭️ 拓展建议

功能 实现建议
📋 动态正文模板 从 Word/HTML 模板读取正文,可支持参数化
✉️ 邮件保留草稿库 使用 .Save() 保存为草稿供审核
📅 定时发送功能 搭配 task scheduler 实现定时运行
💾 执行日志写入 记录邮件发送状态与时间备查
🧪 测试环境支持 可追加测试邮箱列表及时验证功能

🧠 总结

通过本篇脚本,你学会了:

  • 🗄️ Excel 提取邮件地址与部门映射;

  • 📬 Outlook 自动化发送邮件,附带附件;

  • 🔁 批量快速地处理多个邮件任务,提高办公效率。

更多实用案例,代码,素材如下:

自取链接:https://pan.quark.cn/s/a46f30accea2

如果你希望增加 HTML 正文、附件格式转换、发送失败重试机制、或多平台支持(如对接 Gmail/Exchange API),都可以继续告诉我,我可以为你定制更全面的自动化脚本!

相关推荐
Eiceblue4 小时前
使用 Python 向 PDF 添加附件与附件注释
linux·开发语言·vscode·python·pdf
咚咚王者4 小时前
人工智能之编程基础 Python 入门:第五章 基本数据类型(一)
人工智能·python
@LetsTGBot搜索引擎机器人5 小时前
从零打造 Telegram 中文生态:界面汉化 + 中文Bot + @letstgbot 搜索引擎整合实战
开发语言·python·搜索引擎·github·全文检索
短鼻子小象5 小时前
DeepSeek-OCR:革命性文档识别模型全面解析及实测
python·ai·ocr
合作小小程序员小小店6 小时前
基于可视化天气系统demo,基于python+ matplotlib+request爬虫,开发语言python,数据库无,10个可视化界面,需要的可以了联系。
开发语言·爬虫·python·matplotlib
倔强青铜三6 小时前
苦练Python第71天:一行代码就搭出服务器?别眨眼,http.server真有这么爽!
人工智能·python·面试
倔强青铜三6 小时前
苦练Python第70天:征服网络请求!揭开urllib.request的神秘面纱
人工智能·python·面试
倔强青铜三6 小时前
苦练Python第72天:colorsys 模块 10 分钟入门,让你的代码瞬间“好色”!
人工智能·python·面试
胖哥真不错7 小时前
Python基于PyTorch实现多输入多输出进行BP神经网络回归预测项目实战
pytorch·python·毕业设计·论文·毕设·多输入多输出·bp神经网络回归预测
合作小小程序员小小店7 小时前
web网页开发,旧版在线%考试,判题%系统demo,基于python+flask+随机分配考试题目,基于开发语言python,数据库mysql
开发语言·后端·python·mysql·flask·html5