python+POP3实现批量下载邮件附件


Posted in Python onJune 19, 2018

最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业发进邮箱里,需要我来统计打分,想想挨个点进去下载附件的过程就头大,于是萌生了写个脚本来统计作业的想法。

其实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+Django在windows下的开发环境配置图解
Nov 11 Python
python局部赋值的规则
Mar 07 Python
python创建和删除目录的方法
Apr 29 Python
进一步探究Python的装饰器的运用
May 05 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
基于python OpenCV实现动态人脸检测
May 25 Python
python实现反转部分单向链表
Sep 27 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
构建高效的python requests长连接池详解
May 02 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
Python中格式化字符串的四种实现
May 26 Python
Python爬虫制作翻译程序的示例代码
Feb 22 Python
python实现批量解析邮件并下载附件
Jun 19 #Python
Python3使用SMTP发送带附件邮件
Jun 16 #Python
Python3使用turtle绘制超立方体图形示例
Jun 19 #Python
python3使用SMTP发送HTML格式邮件
Jun 19 #Python
python3.X 抓取火车票信息【修正版】
Jun 19 #Python
python3使用SMTP发送简单文本邮件
Jun 19 #Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 #Python
You might like
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
python pdb调试方法分享
2014/01/21 Python
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python作用域用法实例详解
2016/03/15 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python编写Windows Service服务程序
2018/01/04 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
工作时间上网检讨书
2014/02/03 职场文书
企业办公室岗位职责
2014/03/12 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
环保公益策划方案
2014/08/15 职场文书
国庆节标语大全
2014/10/08 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书