Python案例:自动化存储邮件
来自CloudWiki
将邮箱里所有邮件的相关信息存到 Excel 中备份
安装模块
pip install keyring
pip install imbox
独立安装pip:https://blog.csdn.net/sinat_29214327/article/details/80157231
https://blog.csdn.net/u010871448/article/details/96286325
存储密码
要解决这个需求,首先我们利用 keyring 库,通过系统密钥环将开启 IMAP/SMTP服务后获得的密码(授权码)预先在本地存储好。首先打开命令行输入python后输入
>>> import keyring >>> keyring.set_password("qqmail","maxin5452@qq.com","你的密码(授权码)") >>>
这样 password 在本地存储好了,后面只需要 keyring.get_password 获取作为变量即可:
import keyring password = keyring.get_password("qqmail","maxin5452@qq.com")
邮箱设置->账户
读取全部邮件
用 imbox 读取邮件的代码如下:
import keyring password = keyring.get_password("qqmail","maxin5452@qq.com") from imbox import Imbox with Imbox("imap.qq.com","maxin5452@qq.com", password,ssl=True) as imbox: # 获取全部邮件 all_inbox_messages = imbox.messages() # 获取全部邮件 for uid, message in all_inbox_messages: #print(uid) # 邮件编号 #print(message.sent_from) # 发件人 print(message.subject) # 邮件主题 print(message.date) # 日期 #print(message.body['plain']) # 邮件文本格式正文 #print(message.attachments) # 附件
关于上面的代码有几个地方需要注意一下:
- Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) 这行代码中需要填写服务器、用户名邮箱、密码、SSL加密
- 循环体中 uid 参数是每封邮件的编号,邮件编号十分重要,可以用于邮件的标记和删除
- message.sent_from 返回一个包裹字典的列表,这个字典有两个键:name 和 email,name 即用户名(或昵称),email 是发件人的邮箱
- message.date 获取的字符串内容如 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' ,一个 GMT 格式的时间,我们需要将它转化为正常的日期(年月日)+时间(时分秒),也就是将 GMT 时间格式的字符串转换成datetime 类型,可以通过下面的代码:
import datetime date = 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' print(datetime.datetime.strptime(date, GMT_FORMAT))
改进版:读取全部邮件
import keyring password = keyring.get_password("qqmail","maxin5452@qq.com") from imbox import Imbox import datetime with Imbox("imap.qq.com","maxin5452@qq.com", password,ssl=True) as imbox: all_inbox_messages = imbox.messages() # 获取全部邮件 for uid, message in all_inbox_messages: name = message.sent_from[0]['name'] # 发件人姓名 email = message.sent_from[0]['email'] # 发件人邮箱 title = message.subject email_date = message.date text = message.body['plain'] # 文本格式正文 attachment_lst = [] attachments = '' if message.attachments: for attachment in message.attachments: attachment_lst.append(attachment['filename']) attachments = ', '.join(attachment_lst) print(uid, name, email, title, email_date) print(text, attachments if attachments else '无')
参考文档
用Python自动化管理邮件太方便了,三个实用例子带你体会 https://baijiahao.baidu.com/s?id=1691110562223393156&wfr=spider&for=pc