注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

python模拟登陆163邮箱并下载邮件内容(第三版代码片段)  

2013-08-08 16:52:27|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在此之前,我们写过一篇相关的文章:http://fc-lamp.blog.163.com/blog/static/1745666872011102111540508/
今天,我们来修改一下代码让其能够下载邮件的内容。
不过在看代码之前,你可能需要这些知识:
关于python cookielib,urllib2,httplib 模块

OK,上面的内容你时间有慢慢看吧,没有时间得话就看下面的代码吧:
主要的代码片段(注意:由于163邮箱有众多版本,所以登录请求URL,邮件URL等可能也不太一样,下面是163的简约3.0):

#coding:utf-8

'''
模拟登陆163邮箱并下载邮件内容
@author: fc_lamp
@blog:fc-lamp.blog.163.com
'''

import urllib
import urllib2
import cookielib
import re
import time
import json

class Email163:
header = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
user = ''
cookie = None
sid = None
mailBaseUrl='http://twebmail.mail.163.com'

def __init__(self):
self.cookie = cookielib.CookieJar()
cookiePro = urllib2.HTTPCookieProcessor(self.cookie)
urllib2.install_opener(urllib2.build_opener(cookiePro))

def login(self,user,pwd):
'''
登录
'''
postdata = urllib.urlencode({
'username':user,
'password':pwd,
'type':1
})
#注意版本不同,登录URL也不同
req = urllib2.Request(
url='https://ssl.mail.163.com/entry/coremail/fcg/ntesdoor2?funcid=loginone&language=-1&passtype=1&iframe=1&product=mail163&from=web&df=email163&race=-2_45_-2_hz&module=&uid='+user+'&style=10&net=t&skinid=null',
data=postdata,
headers=self.header,
)
res = str(urllib2.urlopen(req).read())
#print res
patt = re.compile('sid=([^"]+)',re.I)
patt = patt.search(res)

uname = user.split('@')[0]
self.user = user
if patt:
self.sid = patt.group(1).strip()
#print self.sid
print '%s Login Successful.....'%(uname)
else:
print '%s Login failed....'%(uname)


def getInBox(self):
'''
获取邮箱列表
'''
print '\nGet mail lists.....\n'
sid = self.sid
url = self.mailBaseUrl+'/jy3/list/list.do?sid='+sid+'&fid=1&fr=folder'
res = urllib2.urlopen(url).read()
#获取邮件列表
mailList = []
patt = re.compile('<div\s+class="tdLike Ibx_Td_From"[^>]+>.*?href="([^"]+)"[^>]+>(.*?)<\/a>.*?<div\s+class="tdLike Ibx_Td_Subject"[^>]+>.*?href="[^>]+>(.*?)<\/a>',re.I|re.S)
patt = patt.findall(res)
if patt==None:
return mailList

for i in patt:
line = {
'from':i[1].decode('utf8'),
'url':self.mailBaseUrl+i[0],
'subject':i[2].decode('utf8')
}
mailList.append(line)

return mailList


def getMailMsg(self,url):
'''
下载邮件内容
'''
content=''
print '\n Download.....%s\n'%(url)
res = urllib2.urlopen(url).read()

patt = re.compile('contentURL:"([^"]+)"',re.I)
patt = patt.search(res)
if patt==None:
return content
url = '%s%s'%(self.mailBaseUrl,patt.group(1))
time.sleep(1)
res = urllib2.urlopen(url).read()
Djson = json.JSONDecoder(encoding='utf8')
jsonRes = Djson.decode(res)
if 'resultVar' in jsonRes:
content = Djson.decode(res)['resultVar']
time.sleep(3)
return content


'''
Demon
'''
#初始化
mail163 = Email163()
#登录
mail163.login('xxxxx@163.com','xxxx')
time.sleep(2)

#获取收件箱
elist = mail163.getInBox()

#获取邮件内容
for i in elist:
print '主题:%s 来自:%s 内容:\n%s'%(i['subject'].encode('utf8'),i['from'].encode('utf8'),mail163.getMailMsg(i['url']).encode('utf8'))



结果:

python模拟登陆163邮箱并下载邮件内容(第三版代码片段) - fc_lamp - @fc_lamp
 
  评论这张
 
阅读(1987)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017