Python自动从邮箱批量下载附件未读信息并按发件人名分类存放

最近接到学生会的工作:收集报名表,作为一个总想着偷懒摸鱼的我,当然是想用代码来自动化解决问题啦,最近正好在学python,便试着用python写个程序从邮箱下载附件并自动分类储存,下面便是源代码了。注意看注释。新手第一次发文章,大佬嘴下留情,瑟瑟发抖,谢谢!!!

import os
import sys
import imaplib
import email

# 用户名和密码
email_user = 'your e-mail address'
email_pass = 'password'          #密码不行就pop3服务的验证码,下面附截图

# 连接邮箱服务器
imap_url = 'imap.qq.com'        #这里可以选择邮箱类型
mail = imaplib.IMAP4_SSL(imap_url, 993)

# 登录邮箱
mail.login(email_user, email_pass)
mail.select('inbox')

# 搜索所有未读邮件
status, email_ids = mail.search(None, "UNSEEN")

# 遍历并下载每个邮件的附件
for email_id in email_ids[0].split():
    status, email_data = mail.fetch(email_id, "(RFC822)")

    # 解析电子邮件消息
    from email import message_from_bytes
    email_message = message_from_bytes(email_data[0][1])

    # 获取发件人
    from_addr = email.utils.parseaddr(email_message['From'])[1]

    # 创建以发件人命名的文件夹
    folder_path = os.path.join('F:/读书分享会报名表收集', from_addr)
    #这里自己可以修改文件夹路径
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

    # 下载附件并保存到对应的文件夹中
    for part in email_message.walk():
        content_type = part.get_content_type()
        if content_type == "application/octet-stream" \
                or content_type == "application/msword" \
    #我这里默认的是word文档,可以自己修改所要下载的文件类型,自己上网查一下
                or content_type == "application/vnd.openxmlformats- 
    officedocument.wordprocessingml.document":

            # 获取原始文件名和编码格式
            filename, charset = email.header.decode_header(part.get_filename())[0]

            # 将文件名转换为UTF-8编码,并去除非法字符
            filename = filename.decode(charset).encode('utf-8', 'ignore').decode()

            with open(os.path.join(folder_path, filename), 'wb') as f:
                f.write(part.get_payload(decode=True))

            # 关闭邮件连接
       mail.close()
      mail.logout()

这个就是QQ邮箱的pop3服务开启的地方,在设置-账号里面

0c68527b3d0d4d82a7f5934ac47c2646.png

对了,为了统计人数和报名的类型,我又写了一段生成excel的代码,废话不多说,看效果

8046922ea57a451ca48ef65d5bceb91f.png

源代码如下:

import os
import pandas as pd

# 设置文件夹路径和分隔符
folder_path = 'F:/读书分享会报名表收集'
delimiter = '-'
#这里需要你自己把文件夹设置好有分隔符,不然提取出来会在一起

# 获取文件夹内所有文件夹的名称
dir_names = [f for f in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, f))]

# 将文件夹名称按照分隔符拆分成多个列,并存储到DataFrame中
df = pd.DataFrame([x.split(delimiter) for x in dir_names], columns=['Column 1', 'Column 2', 'Column 3','Column 4'])
#这里可以改列的名称
output_path = 'F:/读书分享会报名表收集/书单.xlsx'
df.to_excel(output_path, index=False)

 好了,以上就是全部内容了,感谢阅读,有帮助的话就请点个赞吧。手动狗头。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doormandd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值