分表后批量作为邮件附件存入草稿箱

wils
wils

创作者俱乐部成员

继续昨天的尝试,先把xlsx数据表,按供应商分成子表,再作为邮件附件存入草稿箱

分段解释一下代码:

🔔

mail = {}

wb = load_workbook('阻容感缺料.xlsx', read_only=True, data_only=True)

arr = wb['阻容感缺料表'].values

cols = next(arr)

df = pd.DataFrame(arr, columns=cols)

for i in wb['邮箱'].values:

mail[i[0]] = i[1]

wb.close()

mail是供应商对应邮箱的字典

然后是打开xlsx文件,把数据表存入DataFrame

再从邮箱表,将供应商及其对应邮箱存入字典mail

最后关闭xlsx文件

💡

df['物料号'] = df['物料号'].apply(lambda x: f'="{x}"')

这一步是为了避免物料号这一列长数字字符串变成科学计数法,不知道有没有其他好办法

🔔

with imaplib.IMAP4_SSL('imap.163.com') as m:

m.login('xxx@163.com', 'yyy')

m.select('Drafts')

for i, j in df.groupby('供应商'):

out = BytesIO()

j.to_excel(out, index=False)

out.seek(0)

att = MIMEBase('application', 'octet-stream')

att.set_payload(out.read())

encoders.encode_base64(att)

att.add_header('Content-Disposition', 'attachment', filename=f'{i}.xlsx')

msg = MIMEMultipart()

msg['To'] = mail[i]

msg['From'] = 'xxx@163.com'

msg['Subject'] = i

msg.attach(MIMEText(i, 'plain', 'utf-8'))

msg.attach(att)

typ, dat = m.append('Drafts', '', imaplib.Time2Internaldate(time.time()), msg.as_bytes())

print(typ)

和昨天一样,登录163邮箱的imap服务,将生成的邮件存入草稿箱

不同的是:

  • 将DataFrame按供应商分组后的每一组数据,存为xlsx表,但不存入硬盘,而是BytesIO

  • 直接从BytesIO读取,生成邮件附件,添加到每一封对应邮件

这样做主要是为了跨平台,在没有outlook的环境里,分表,再批量生成带附件的邮件草稿,然后可以通过任意客户端,甚至从手机邮箱里检查一遍,最后发送

---------------废话分割线------------------

还是在想wps缺少outlook对应的邮箱功能

其实outlook用vba宏写分表后添加邮件附件,比上面的代码还要复杂很多

且生成的邮件正文的源文件非常乱,难以从中获取数据或是修改

且outlook的自动化非常依赖windows环境的vba

outlook缺点也不少,但起码能用,且对于鼠标点击操作还是很友好的

linux里thunderbird用js做自动化,跨平台好一点,但还是复杂

现在推广国产linux系统,邮箱自动化这一块又没法替代,微信QQ一方面不能作为证据,正式场合不适用,另一方面自动化微信QQ更是个大坑,还不如邮箱稳定,试了一大圈,还是得用python写邮箱的自动化脚本,不知道有没有其他更方便的办法,期待朋友们讨论

广东省
浏览 367
收藏
6
分享
6 +1
2
+1
全部评论 2
 
『峰格』
打卡
· 山东省
回复
 
亂雲飛渡
学习
· 广东省
回复