最近因为总是要查看是否有重要的工作邮件,频繁登录几个邮件网站,觉得很繁琐,于是用python写了个查询是否有新邮件和下载邮件信息的小工具。至于为什么没写收取邮件的工具,是因为不是每天都收到新邮件,而且现在很多广告邮件,不必都收取。
getNewMailNum:查看是否有新邮件
checkMail:下载邮件信息(发信人,发信日期,标题)
InfoOutPut:输出邮件信息
工作原理是使用了imaplib模块,经过测试,发现126,163,gmail,qq邮件支持imap协议,其余sina,hotmail等还不支持,所以不是所有邮箱都可以使用。再次鄙视某些公司,口说为人民服务,实际暗怀私心,不积极开源与参与标准。哦,话题扯远了。:-)
实际写起来不难,但是我对邮件信息的下载,是把所有收件箱的邮件都下载,无法过滤出新邮件,这是因为对imaplib还未了解透彻,无法实现只下载新邮件的信息,如果哪位读者知道,可以告诉我,加以改进。
还有一个问题花了点时间,也没有解决,就是中英文混合字符串输出格式问题。因为中文占2个英文字符宽度。中英文混合在一起输出(我设置每行输出76个英文字符宽度),就会无法对齐,网上查了一些资料,是由于操作系统对单个中文和英文的像素设置不同而且中文像素宽不是英文的像素宽度的两倍造成的。所以,大家在收取含有大量中文的邮件就会格式无法对齐。
另外,对于输出中文的解决方案,我是先设置python的默认字符为gbk(因为发现有些邮件中文编码是gbk,不是gb2312),否则print出来是乱码。
import sys
reload(sys)
sys.setdefaultencoding('gbk')
然后对获取的邮件字符解码
email.Header.decode_header(msg["Subject"])
Header.decode_header会把字符串解码,告诉你这串字符的编码是什么,然后把字符统一转成unicode,就可以打印输出了。
使用过程:先通过小工具检查是否有新邮件,如果有,就下载邮件信息,查看邮件标题,确认是有用的邮件,才登录邮件网站收取。
Ps:代码测试环境win7+python2.5.2
测试1:检查是否有新邮件
测试2:下载邮件基本信息
getNewMailNum:查看是否有新邮件
checkMail:下载邮件信息(发信人,发信日期,标题)
InfoOutPut:输出邮件信息
工作原理是使用了imaplib模块,经过测试,发现126,163,gmail,qq邮件支持imap协议,其余sina,hotmail等还不支持,所以不是所有邮箱都可以使用。再次鄙视某些公司,口说为人民服务,实际暗怀私心,不积极开源与参与标准。哦,话题扯远了。:-)
实际写起来不难,但是我对邮件信息的下载,是把所有收件箱的邮件都下载,无法过滤出新邮件,这是因为对imaplib还未了解透彻,无法实现只下载新邮件的信息,如果哪位读者知道,可以告诉我,加以改进。
还有一个问题花了点时间,也没有解决,就是中英文混合字符串输出格式问题。因为中文占2个英文字符宽度。中英文混合在一起输出(我设置每行输出76个英文字符宽度),就会无法对齐,网上查了一些资料,是由于操作系统对单个中文和英文的像素设置不同而且中文像素宽不是英文的像素宽度的两倍造成的。所以,大家在收取含有大量中文的邮件就会格式无法对齐。
另外,对于输出中文的解决方案,我是先设置python的默认字符为gbk(因为发现有些邮件中文编码是gbk,不是gb2312),否则print出来是乱码。
import sys
reload(sys)
sys.setdefaultencoding('gbk')
然后对获取的邮件字符解码
email.Header.decode_header(msg["Subject"])
Header.decode_header会把字符串解码,告诉你这串字符的编码是什么,然后把字符统一转成unicode,就可以打印输出了。
my_unicode(s, encoding)
--------------------getNewMailNum-------------------------------------
#-*- encoding: utf-8 -*-
#author : rayment
#CreateDate : 2012-06-24
import imaplib
import re
import InfoOutPut
def gmail_checker(mailhost, username, password, flag = 0):
i=imaplib.IMAP4_SSL(mailhost)
try: