批量生成邮件草稿
创作者俱乐部成员
以批量发送工资条为例
Windows里使用outlook配合office,可以比较方便的批量发送邮件
Linux里的thunderbird有mail merge插件,可以类似邮件合并的方式批量发邮件
类似的还有,CDO对象、sendmail命令、fdm等工具,写脚本批量发邮件
但是,这里有两个问题:
邮件合并方式生成的是word文档,而邮件本身是html格式,导致想要批量修改已经生成的html正文的邮件,或是从收信中获取信息都很困难,简单说就是html邮件正文不干净
写smtp脚本发邮件的方式,则缺少检查这个步骤,难以发现出错,出错后也是改脚本再批量盲目发,且批量发送有时会受到服务器限制
🔔 | 上图是py模板生成的邮件正文 下图是outlook生成的,只插入表格的这一个步骤后的邮件正文,想写宏修改、获取信息有点头大 |
试了很多工具,最后还是python写脚本,批量生成草稿这个方式,一方面保证邮件结构清晰简单,一方面可以在草稿箱检查后,手动批量发,保证安全
🔔 | import time import imaplib from openpyxl import load_workbook from jinja2 import Template from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart with open('temp.html', 'r', encoding='utf-8') as f: tmp = Template(f.read()) wb = load_workbook('data.xlsx', read_only=True, data_only=True) with imaplib.IMAP4_SSL('imap.163.com') as m: m.login('xxx@163.com', 'yyy') m.select('Drafts') for i in wb.active.iter_rows(min_row=2, values_only=True): msg = MIMEMultipart() msg['To'] = i[0] msg['From'] = 'xxx@163.com' msg['Subject'] = '工资条' msg.attach(MIMEText(tmp.render(arr=i[1:]), 'html', 'utf-8')) typ, dat = m.append('Drafts', '', imaplib.Time2Internaldate(time.time()), msg.as_bytes()) print(typ) wb.close() |
大概意思是:
使用jinja2从temp.html获取模板,这里是一个简单的表格,接受一个数组
从data.xlsx文件获取每个人具体的工资信息
用xlsx里的每行信息的数组去渲染temp.html,生成邮件正文
登录imap邮箱,将生成的邮件存入草稿箱
可以看到,代码比较短
html模板可以很灵活很干净,有利于修改,有利于获取邮件后自动获取信息
需要添加附件,只要加一句msg.attach就行
存入草稿箱这个批量操作,即使出错,也不造成后果,删除草稿,重新来过就好
同样的脚本随便什么平台都可以直接使用,win、linux、安卓等等
创作者俱乐部成员