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")

邮箱设置->账户

Python21042401.png

读取全部邮件

用 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