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

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

其实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() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现批量解析邮件并下载附件

    python中的email模块可以方便的解析邮件,先上代码 #-*- encoding: gb2312 -*- import os import email def mail_to_text(mailname,datapath,index): #由于批处理的邮件包含的附件名称相同,这里传入一个index作为区别符 fp=open(mailname,"r") msg=email.message_from_file(fp) for par in msg.walk(): if not par

  • python实现下载pop3邮件保存到本地

    利用python进行unix管理一书中有一个登陆下载邮箱的脚本,实练了下还不错,对于邮箱备份来说还是比较快捷的,但是其命名方式是以编号和 文件大小来命名的,不方便阅读,于是进行了改进修改为发件人邮件地址命名,可能由于跨度时间较长,邮件排版有改变,有些邮件获取发件人的时候不能正确匹配. 1.命名方式是以编号和 文件大小来命名 #!/usr/bin/env python #-*- coding: utf-8 -*- #filename:receive_pop3_email_download.py i

  • python登录pop3邮件服务器接收邮件的方法

    本文实例讲述了python登录pop3邮件服务器接收邮件的方法.分享给大家供大家参考.具体实现方法如下: import poplib, string PopServerName = "mail.yourserver.com" PopServer = poplib.POP3(PopServerName) print PopServer.getwelcome() PopServer.user('yourName') PopServer.pass_('yourPass') r, items,

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

    最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业发进邮箱里,需要我来统计打分,想想挨个点进去下载附件的过程就头大,于是萌生了写个脚本来统计作业的想法. 其实python里收发邮件都有很方便的包,合理使用就好,可以解决绝大多数的邮件收发任务.但是这个脚本写下来还是花了不少时间,其中最大的一部分时间是花在了python的编码问题上,python2和python3的编码预设有些许的不一样,在python3中又取消了unicode这个方法,这就导致很多在python2中

  • python使用imap-tools模块下载邮件附件的示例

    最近在做一些email相关的办公自动化项目,发现一个第三方模块imap-tools不错, 网上没有啥相关介绍,所以记录下来. 环境: python3.8; imap-tools 0.39.0 需要pip 安装一下imap-tools模块 imap-tools模块是python的第三方扩展, 它使用标准库imaplib,并将常见的邮件处理事件封装,邮件处理起来代码短. 下面是个下载邮件附件的示例 from imap_tools import MailBox with MailBox("imap服务

  • python实现壁纸批量下载代码实例

    项目地址:https://github.com/jrainlau/wallpaper-downloader 前言 好久没有写文章了,因为最近都在适应新的岗位,以及利用闲暇时间学习python.这篇文章是最近的一个python学习阶段性总结,开发了一个爬虫批量下载某壁纸网站的高清壁纸. 注意:本文所属项目仅用于python学习,严禁作为其他用途使用! 初始化项目 项目使用了virtualenv来创建一个虚拟环境,避免污染全局.使用pip3直接下载即可: pip3 install virtualen

  • Python爬虫之批量下载喜马拉雅音频

    一.解析网站 1.1 获取音频地址 在喜马拉雅网站上,随便点开一个音频,打开"开发者工具",再点击播放按钮,可以看到出现了多个请求: 经过排查,发现可疑url: 查看它的响应信息,发现音频地址就在里面: 接下来,解析这个返回音频地址的url: https://www.ximalaya.com/revision/play/v1/audio?id=348451879&ptype=1 发现url中的id参数就决定了返回的音频地址,而id参数是音频的id号. 1.2 解析专栏网页 我们

  • Perl批量下载Gmail附件的代码

    最近在写一个从gmail批量下载附件的程序,用到了 Mail::POP3Client 和 MIME::Parser 2 个模块 实现代码: 复制代码 代码如下: use Mail::POP3Client; use MIME::Parser;   my $U = 'User.Name@gmail.com'; my $P = 'uSeR.pAsSwORd'; my $X = new MIME::Parser; $X -> output_dir('C:\\download');    #directo

  • Python实现的批量下载RFC文档

    RFC文档有很多,有时候在没有联网的情况下也想翻阅,只能下载一份留存本地了. 看了看地址列表,大概是这个范围: http://www.networksorcery.com/enp/rfc/rfc1000.txt ... http://www.networksorcery.com/enp/rfc/rfc6409.txt 哈哈,很适合批量下载,第一个想到的就是迅雷-- 可用的时候发现它只支持三位数的扩展(用的是迅雷7),我想要下的刚好是四位数-- 郁闷之下萌生自己做一个的想法! 这东西很适合用pyt

  • 用python爬虫批量下载pdf的实现

    今天遇到一个任务,给一个excel文件,里面有500多个pdf文件的下载链接,需要把这些文件全部下载下来.我知道用python爬虫可以批量下载,不过之前没有接触过.今天下午找了下资料,终于成功搞定,免去了手动下载的烦恼. 由于我搭建的python版本是3.5,我学习了上面列举的参考文献2中的代码,这里的版本为2.7,有些语法已经不适用了.我修正了部分语法,如下: # coding = UTF-8 # 爬取李东风PDF文档,网址:http://www.math.pku.edu.cn/teacher

  • 二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)

    可以使用Python的email模块来实现带有附件的邮件的发送. SMTP (Simple Mail Transfer Protocol)邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用来接收邮件.大多数的邮件发送服务器 (Outgoing Mail Server) 都是使用SMTP协议.SMTP协议的默认TCP端口号是25. SMTP协议的一个重要特点是它能够接力传送邮件.它工作在两种情况

  • Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_all() from gevent.pool import Pool import requests import sys import os def download(url): chrome = 'Mozilla/5.0 (X11; Linux i86_64) AppleWebKit/537.36

  • Python爬取qq music中的音乐url及批量下载

    前言 qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的.于是,来了个qqmusic的爬虫.至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在url吧.下面开始找吧(讲的不对不要笑我) 实现如下 #寻找url: 这个url可不想其他的网站那么好找.把我给累得不轻,关键是数据多,从那么多数据里面挑出有用的数据,最后组合为music真正的music.昨天做的时候整理的几个中间url: #url1:https://c.y.qq.com/sos

随机推荐