使用脚本下载Gmail邮件附件
以下脚本连接上我的Gmail帐号,将收件箱中2013年1月份的新语丝邮件的附件保存在当前目录的xys文件夹中。
import imaplib
import email
import os
dir_name = 'archive'
if not os.path.exists(dir_name):
os.mkdir(dir_name)
save_path = os.path.join(os.getcwd(),dir_name)
M = imaplib.IMAP4_SSL('imap.gmail.com')
M.login('leetschau@gmail.com', 'vim72python251')
M.select() # default value is inbox
search_criteria = '(From "Shi-min Fang" UNSEEN)'
# '(From "Shi-min Fang" SINCE "01-Jan-2013" BEFORE "01-FEB-2013")'
res, search_result = M.search(None, search_criteria)
for num in search_result[0].split():
typ, data = M.fetch(num, '(RFC822)')
# print 'Message %s\n%s\n' % (num, data[0][1])
email_body = data[0][1]
mail = email.message_from_string(email_body)
sender = mail['From']
subject = mail['Subject']
print "["+mail["From"]+"]: " + mail["Subject"]
for part in mail.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = subject+'.txt'
att_path = os.path.join(save_path, filename)
if not os.path.isfile(att_path) :
fp = open(att_path, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
M.close()
M.logout()
说明:
附件保存的名字和扩展名是写死的,有兴趣的话可以研究一下怎样获得附件本身的文件名;
这个脚本的强大之处在于它不需要任何第三方库,只用python内置的imaplib,只用是支持imap的邮箱都可以用这个方法处理邮件;
这里面最有用的是邮件搜索规则(search_criteria),格式是(key1 value1 key2 value2 ...),每个value上加引号,整个表达式是一个字符串,因此也要加引号。
key除了这里的收件人、起始/终止日期,还有ALL(全部邮件),UNSEEN(未读邮件),DELETED(已删除邮件)等,key-value对之间可以随意组合;
- M的select方法默认值是收件箱,可以指定其他信箱,完整格式是:IMAP4.select([mailbox[, readonly]]);
参考1:http://stackoverflow.com/questions/6225763/downloading-multiple-attachments-using-imaplib
参考2:Python 2.7.3 chapter 20.10 imaplib -> 20.10.2: IMAP4 Example
使用脚本下载Gmail邮件附件的更多相关文章
- .NET接收邮件下载邮件附件——openpop.net
使用OpenPop.Net接收邮件很方便,下面是接收下载邮件附件的代码 OpenPop.Net下载地址 https://sourceforge.net/projects/hpop/ public cl ...
- 在Delphi中使用indy SMTP发送gmail邮件[转]
在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30| 分类: Delphi | 标签: |举报 |字号大中小 订阅 在Delphi中发送 ...
- sql server 脚本创建数据库邮件
sql server 脚本创建数据库邮件代码: --脚本创建数据库邮件 --1.开启数据库邮件 RECONFIGURE WITH OVERRIDE GO RECONFIGURE WITH OVERRI ...
- .net发邮件 附件文件名乱码
.net发邮件 附件文件名乱码,可以下载以下补丁安装. https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.asp ...
- Gmail邮件功能那么强大,GMail被封,在国内怎么用gmail收邮件?
IT圈子里最热门的话题一定是:gmail被封,该怎么办?gmail由于强大的邮件功能,ITer一定是人手一个or多个,之前想要收发gmail使用imap或SMTP方式是可以在国内正常使用的,目前ima ...
- Ubuntu 下使用 mutt 和 msmtp 发送 Gmail 邮件
参考: http://www.cnblogs.com/refrag/archive/2012/11/28/2793533.html http://www.habadog. ...
- 个人永久性免费-Excel催化剂功能第84波-批量提取OUTLOOK邮件附件
批量操作的事情常常能让人感到十分畅快,区别于一次次的手工的操作,它真正实现了“人工智能”想要的效果,人指挥机器做事情,机器就可以按着人意去操作.此篇给大家再次送了批量操作一绝活,批量下载OUTLOOK ...
- 用CleanMyMacX怎样进行邮件附件清理,CleanMyMacX清理邮件附件的方法
都晓得CleanMyMacX邮件附件清理功能十分强大,用CleanMyMacX怎样进行邮件附件清理,CleanMyMacX清理邮件附件的方法带给你,邮件附件清理功能可以保证在收件箱中原始附件的安全性的 ...
- Linux centosVMware 告警系统主脚本、告警系统配置文件、告警系统负载脚本、告警系统502日志脚本、告警系统disk监控脚本、告警系统邮件引擎
一.告警系统主脚本 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 程序架构 ...
随机推荐
- Gym 101147G 第二类斯特林数
大致题意: n个孩子,k场比赛,每个孩子至少参加一场比赛,且每场比赛只能由一个孩子参加.问有多少种分配方式. 分析: k>n,就无法分配了. k<=n.把n分成k堆的方案数乘以n的阶乘.N ...
- MySql:mysql修改密码及配置远程连接
通过配置文件修改 mysql5.7 mysql库下面的user表没有password字段无法修改密码,5.7版本已经不再使用password来作为密码的字段了 而改成了authentication ...
- Zookeeper:Windows下Zookeeper启动zkServer.cmd闪退问题
Zookeeper在Windows下启动只需要运行zkServer.cmd双击即可(需保证运行环境中正确安装了Java运行环境) 但是在有的时候会出现双击闪退的情况.针对闪退,可按照如下方法进行解决: ...
- sshpass用法介绍
参考文章:http://www.mamicode.com/info-detail-1105345.html https://www.jianshu.com/p/a2aaa02f57dd p.p1 { ...
- centos安装svn,centos客户端运用svn
场景: 操作如下: 搭建svn服务器:192.168.43.130 1.安装subversion 2.创建本地仓库 mkdir /haha/svn/something svnadmin cre ...
- servlet核心技术2
一.Servet 与 JDBC 在Servlet中可以使用JDBC技术访问数据库,查询DB数据,然后生成显示页面,接收请求参数,然后对DB操作 为了方便重用和便于维护等目的,经常会采用DAO(Data ...
- libcurl库(C++)快速使用
---恢复内容开始--- libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支 ...
- AspNetCore&MassTransit Courier实现分布式事务
在之前的一篇博文中,CAP框架可以方便我们实现非实时.异步场景下的最终一致性,而有些用例总是无法避免的需要在实时.同步场景下进行,可以借助Saga事务来解决这一困扰.在一些博文和仓库中也搜寻到了.Ne ...
- python -- 模块与类库
一.模块 模块(Module)是由一组类.函数和变量组成的,模块文件的扩展名是.py或.pyc 在使用模块之前,需要先使用import语句导入这个模块. 语法格式如下: import 模块名 from ...
- Beego和Vue的前后端分离跨域问题处理
VUE封装的请求头(注意请求头,跨域要用到) 路径 utils/mereq.js import request from '@/utils/request' import qs from 'qs' e ...