使用方法 /usr/bin/python2.7  ./getMail.py  <邮件标题>

代码里有个base_save_path是附件存放的目录,可以改成其它路径。

getMail.py代码:

#!/usr/bin/python2.7
# _*_ coding: utf-8 _*_import poplib
import email
import sys
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddrdef decode_str(s):value, charset = decode_header(s)[0]if charset:value = value.decode(charset)return valuedef guess_charset(msg):# 先从msg对象获取编码:charset = msg.get_charset()if charset is None:# 如果获取不到,再从Content-Type字段获取:content_type = msg.get('Content-Type', '').lower()pos = content_type.find('charset=')if pos >= 0:charset = content_type[pos + 8:].strip()return charsetdef get_email_headers(msg):# 邮件的From, To, Subject存在于根对象上:headers = {}for header in ['From', 'To', 'Subject', 'Date']:value = msg.get(header, '')if value:if header == 'Date':headers['date'] = valueif header == 'Subject':# 需要解码Subject字符串:subject = decode_str(value)headers['subject'] = subjectelse:# 需要解码Email地址:hdr, addr = parseaddr(value)name = decode_str(hdr)value = u'%s <%s>' % (name, addr)if header == 'From':from_address = valueheaders['from'] = from_addresselse:to_address = valueheaders['to'] = to_addresscontent_type = msg.get_content_type()print 'head content_type: ', content_typereturn headers# indent用于缩进显示:
def get_email_cntent(message, base_save_path):j = 0content = ''attachment_files = []for part in message.walk():j = j + 1file_name = part.get_filename()contentType = part.get_content_type()# 保存附件if file_name: # Attachment# Decode filenameh = email.Header.Header(file_name)dh = email.Header.decode_header(h)filename = dh[0][0]if dh[0][1]: # 如果包含编码的格式,则按照该格式解码filename = unicode(filename, dh[0][1])filename = filename.encode("utf-8")data = part.get_payload(decode=True)att_file = open(base_save_path + filename, 'wb')attachment_files.append(filename)att_file.write(data)att_file.close()elif contentType == 'text/plain' or contentType == 'text/html':# 保存正文data = part.get_payload(decode=True)charset = guess_charset(part)if charset:charset = charset.strip().split(';')[0]print 'charset:', charsetdata = data.decode(charset)content = datareturn content, attachment_filesif __name__ == '__main__':# 输入邮件地址, 口令和POP3服务器地址:emailaddress = '邮箱地址'# 注意使用开通POP,SMTP等的授权码password = '密码'pop3_server = 'pop.163.com'# 连接到POP3服务器:server = poplib.POP3(pop3_server)# 可以打开或关闭调试信息:# server.set_debuglevel(1)# POP3服务器的欢迎文字:print server.getwelcome()# 身份认证:server.user(emailaddress)server.pass_(password)# stat()返回邮件数量和占用空间:messagesCount, messagesSize = server.stat()print 'messagesCount:', messagesCountprint 'messagesSize:', messagesSize'''# list()返回所有邮件的编号:resp, mails, octets = server.list()print '------ resp ------'print resp # +OK 46 964346 响应的状态 邮件数量 邮件占用的空间大小print '------ mails ------'print mails # 所有邮件的编号及大小的编号list,['1 2211', '2 29908', ...]print '------ octets ------'print octets# 获取最新一封邮件, 注意索引号从1开始:length = len(mails)for i in range(length):resp, lines, octets = server.retr(i + 1)'''# 获取最新一封邮件, 注意索引号从1开始:#length = len(mails)#for i in range(length):for i in range(messagesCount, -1, -1):resp, lines, octets = server.retr(i)#resp, lines, octets = server.retr(messagesCount)# lines存储了邮件的原始文本的每一行,# 可以获得整个邮件的原始文本:msg_content = '\n'.join(lines)# 把邮件内容解析为Message对象:msg = Parser().parsestr(msg_content)# 但是这个Message对象本身可能是一个MIMEMultipart对象,即包含嵌套的其他MIMEBase对象,# 嵌套可能还不止一层。所以我们要递归地打印出Message对象的层次结构:print '---------- 解析之后 ----------'base_save_path = '/etc/cron.d/'msg_headers = get_email_headers(msg)#print 'subject:', msg_headers['subject']#print 'from_address:', msg_headers['from']#print 'to_address:', msg_headers['to']#print 'date:', msg_headers['date']print 'argv[i]', sys.argv[1]if msg_headers['subject'] == sys.argv[1] :content, attachment_files = get_email_cntent(msg, base_save_path)break#print 'content:', content#print 'attachment_files: ', attachment_files# 关闭连接:server.quit()

python 获取邮箱附件相关推荐

  1. 【Python】自动化办公-outlook邮箱处理(获取邮箱附件)/通过下载链接自动下载

    outlook邮箱处理-获取邮箱附件 #先引入outlook import win32com.client outlook = win32com.client.Dispatch("Outlo ...

  2. python下载邮箱附件_基于Python3 下载邮箱附件,并解压到指定文件夹

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -*- encoding: gbk -*- # 目前只测试过网易163邮箱,qq邮箱时间格式与163有 ...

  3. python获取邮箱地址_Python操作邮箱

    from email.parser importParserfrom email.header importdecode_headerfrom email.utils importparseaddri ...

  4. 用pop3获取邮箱附件_在第三方电子邮件客户端如何测试邮箱账号?

    我们常见的邮箱有:网易邮箱.outlook.foxmail.畅邮(Dreammail Pro)等等,下面以畅邮(Dreammail Pro)为例. 流程 排查邮箱故障:通过"测试帐号&quo ...

  5. 使用python获取邮箱邮件

    首先我们要在邮箱的设置中开通那个POP3 然后我们要导入这些包 import poplib from datetime import datetime import jieba import re f ...

  6. python实现电子邮件附件指定时间段,批量下载以及C#小程序集成实现

    目录 一.需求背景 二.需求分析 三.需求实现 3.1 python邮箱附件指定时间下载 3.2 python外部传参 3.3 C#界面设计 四.功能实现 4.1 邮箱设置 4.2 邮件附件下载实现 ...

  7. python 批量下载指定时间段的邮箱附件

    邮箱附件下载 在收到很多人发的邮件时,一个一个的接收附件比较麻烦,考虑使用python实现指定日期邮件附件的下载 首先需要开启邮箱的pop协议,一般在设置里,以QQ邮箱为例,设置后会给个密码,这个就是 ...

  8. python实现自动批量下载邮箱附件--GUI

    一.需求描述 能根据关键字和时间段下载指定的邮箱文件:word,pdf,xls.xlxs,zip,rar 二.系统设置 1.邮箱需要开启POP3服务 举例网易邮箱: (1)进入到网易邮箱官网,&quo ...

  9. Python自动获取邮箱验证码【上集】

    本文阅读时长:3-5min 声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 前置:Google IMAP协议设置 与 专用密码设置 本次教程为自动获取邮箱验证码实 ...

最新文章

  1. 【转发】什么时候该用委托,为什么要用委托,委托有什么好处
  2. 宏基因组理论教程7挖掘微生物组生物标记
  3. freecodecamp_为什么您一定要参与freeCodeCamp的一个研究小组
  4. 机器学习笔记(十一):支持向量机
  5. 开发者工具保留调用连接_如何整理您的开发者资料并保留旧的简历
  6. 洛谷1091 合唱队形
  7. Python语言程序设计基础 第二版(嵩天著)课后答案第五章
  8. 【心理学】情感心理学-当代思想和传统思想的碰撞(本篇文章将不定期持续更新)
  9. 【新手入门.考试高频】Java中“一个类声明的两个对象如果有相同的引用,二者就有相同的变量”的理解
  10. 万维网服务器如何发送文档,服务器配置和管理教学讲义(39页)-原创力文档
  11. Android单元测试 Instrumentation
  12. userdel删除用户时候提示:userdel: user xx is currently logged in
  13. MyBatis配置数据库
  14. IDEA 打不开,双击无反应,IDEA 2021.3
  15. OKX领投的P2E平台—Klay Dice 打造属于自己的生态!
  16. 秋招春招,网申在线测评中的智力测试
  17. IDEA搭建简单的SSM(spring+springMVC+mybatis)框架
  18. JAVA毕设项目智慧物业管理系统(java+VUE+Mybatis+Maven+Mysql)
  19. from skimage import morphology 报错
  20. 程序员坐牢了,继续被安排写代码。。

热门文章

  1. 2020年12月份安排与心得
  2. 1.端口被占用的最简解决方法
  3. 坚持是一种可怕的力量,一年半原创文章,关心到每一位程序员
  4. 基于Arduino电容式感应库的触摸控制灯
  5. python分析彩票数据,这波太炸了!Python脚本可视化居然可以这么玩
  6. 思维导图提高阅读效率简单的方法是什么?分享高效阅读思维导图模板及绘制技巧
  7. [设计模式]解释器(Interpreter)之大胆向MM示爱吧
  8. 什么是闭包?闭包有什么作用?
  9. 碟片管理系统代码重构示例
  10. 4.20 恺撒Caesar密码