python+POP3实现批量下载邮件附件
2018-06-19 15:30
1056 查看
最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业发进邮箱里,需要我来统计打分,想想挨个点进去下载附件的过程就头大,于是萌生了写个脚本来统计作业的想法。
其实python里收发邮件都有很方便的包,合理使用就好,可以解决绝大多数的邮件收发任务。但是这个脚本写下来还是花了不少时间,其中最大的一部分时间是花在了python的编码问题上,python2和python3的编码预设有些许的不一样,在python3中又取消了unicode这个方法,这就导致很多在python2中写的例程都没法在3中运行。
经过修改以后下面的脚本可以从邮箱中获取指定日期范围内的邮件附件,并存如指定目录中。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import poplib import email import datetime import time import os import xlrd import xlwt from email.parser import Parser from email.header import decode_header from email.utils import parseaddr # 输入邮件地址, 口令和POP3服务器地址: email = 'xxxxxxxx@qq.com' password = 'xxxxxxxxxxx' pop3_server = 'pop.qq.com' def decode_str(s):#字符编码转换 value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value def get_att(msg): import email attachment_files = [] for part in msg.walk(): file_name = part.get_filename()#获取附件名称类型 contType = part.get_content_type() if file_name: h = email.header.Header(file_name) dh = email.header.decode_header(h)#对附件名称进行解码 filename = dh[0][0] if dh[0][1]: filename = decode_str(str(filename,dh[0][1]))#将附件名称可读化 print(filename) #filename = filename.encode("utf-8") data = part.get_payload(decode=True)#下载附件 att_file = open('E:\\L\\zy\\307\\' + filename, 'wb')#在指定目录下创建文件,注意二进制文件需要用wb模式打开 attachment_files.append(filename) att_file.write(data)#保存附件 att_file.close() return attachment_files # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3() server = poplib.POP3_SSL(pop3_server) server.set_debuglevel(1) # 打印POP3服务器的欢迎文字: print(server.getwelcome().decode('utf-8')) # 身份认证: server.user(email) server.pass_(password) # 返回邮件数量和占用空间: print('Messages: %s. Size: %s' % server.stat()) # list()返回所有邮件的编号: resp, mails, octets = server.list() # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...] print(mails) index = len(mails) for i in range(index,0,-1): #倒序遍历邮件 resp, lines, octets = server.retr(i) # lines存储了邮件的原始文本的每一行, #邮件的原始文本: msg_content = b'\r\n'.join(lines).decode('utf-8') #解析邮件: msg = Parser().parsestr(msg_content) #获取邮件时间 date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S') #格式化收件时间 date2 = time.strftime("%Y%m%d", date1)#邮件时间格式转换 if (date2<'20180306')|(date2>'20180314'): continue f_list = get_att(msg)#获取附件 #print_info(msg) server.quit()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- python实现批量解析邮件并下载附件
- 详解python实现读取邮件数据并下载附件的实例
- 利用VBA将Outlook邮件的信息存入数据库,批量下载附件并重命名
- 实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
- asp.net 中实现附件批量上传与下载。
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- 实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- python+POP3 批量下载邮件附件
- ASP.NET实现批量下载文件及附件的方法详细讲解
- 附件点击即下载的实现
- 要用ASP.NET实现邮箱中附件下载的功能
- node.js爬虫爬取电影天堂,实现电视剧批量下载。
- Java实现邮件发送(带附件)
- 使用javaMail收邮件 支持附件下载
- java实现阿里OSS服务器多文件打包ZIP下载,批量下载
- 利用Python脚本实现-----登陆新浪微博&批量下载收藏内容
- SharePoint 2010 自定义Ribbon实现文档批量下载为Zip文件
- java实现发送邮件包含添加附件等(一)