分表后批量作为邮件附件存入草稿箱
创作者俱乐部成员
继续昨天的尝试,先把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写邮箱的自动化脚本,不知道有没有其他更方便的办法,期待朋友们讨论