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

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

注意:

1 由于163邮箱有众多版本,所以登录请求URL,邮件URL等可能也不太一样,下面是163的简约3.0

2 代码缺乏错误处理能力,有待优化。

3 更多参考:http://fc-lamp.blog.163.com/blog/static/17456668720137844546560/

1.[代码][Python]代码

#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('

]+>.*?href="([^"]+)"[^>]+>(.*?).*?
]+>.*?href="[^>]+>(.*?)',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'))

2.[图片] 结果.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python模拟登录通常使用requests库来实现,以下是三种常见的方式: 1. 基于session的登录方式 ```python import requests # 创建session对象 s = requests.Session() # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 s.post(login_url, data=data) # 访问需要登录才能访问的页面 response = s.get("http://example.com/profile") ``` 2. 基于cookie的登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取cookie cookie_dict = response.cookies.get_dict() # 使用cookie访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", cookies=cookie_dict) ``` 3. 基于token的登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取token token = response.json().get("token") # 设置header中的Authorization字段 headers = { "Authorization": f"Bearer {token}" } # 使用token访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", headers=headers) ``` 以上三种方式都可以实现模拟登录,具体使用哪种方式取决于登录接口的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值