批量生成邮件草稿

wils
wils

创作者俱乐部成员

以批量发送工资条为例

  • 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、安卓等等

海南省
浏览 538
1
7
分享
7 +1
4
1 +1
全部评论 4
 
亂雲飛渡
学习
· 广东省
回复
 
幸福春
长见识了
· 山东省
回复
 
企鹅爱上จุ๊บ北极熊
厉害,学习
· 湖南省
回复
 
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

好专业啊!
· 辽宁省
回复