“Python案例:自动化存储邮件”的版本间的差异
来自CloudWiki
第55行: | 第55行: | ||
print(datetime.datetime.strptime(date, GMT_FORMAT))</nowiki> | print(datetime.datetime.strptime(date, GMT_FORMAT))</nowiki> | ||
+ | |||
+ | ===改进版:读取全部邮件=== | ||
+ | |||
+ | <nowiki> | ||
+ | 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 '无')</nowiki> |
2021年4月24日 (六) 07:38的版本
将邮箱里所有邮件的相关信息存到 Excel 中备份
安装模块
pip install keyring
pip install imbox
存储密码
要解决这个需求,首先我们利用 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 '无')