python 3.x 163邮箱登陆,邮件读取

原创 2015年11月20日 10:52:08
import  urllib.request
import  urllib.parse
import  http.cookiejar,re

opener = None

# 带Cookie访问
def openurl(parms):
  global opener
  if opener == None:
      #cookie设置
      cj =  http.cookiejar.CookieJar()
      opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
  ret = opener.open(parms)
  return ret


def login_163(**parms):
  #初始化
  parms_key = ['domain','password','username']
  arg = {}
  for key in parms_key:
    if key in parms:
      arg[key] = parms[key]
    else:
      arg[key] = ''
  #获取syscheckcode
  pre_login = arg['domain']
  html = openurl(pre_login).read().decode('utf-8')

  patt = re.compile(r'.*?name=syscheckcode.*?value="(.*?)".*?')
  syscheckcode = patt.search(html)
  if not syscheckcode:
    raise Exception('GET syscheckcode Fail!')
  syscheckcode = syscheckcode.group(1)

  #登陆
  postdata = {
   'syscheckcode':syscheckcode,
   'password':arg['password'],
   'username':arg['username'],
    }
  postdata = urllib.parse.urlencode(postdata)
  postdata = postdata.encode('utf-8')
  req = urllib.request.Request(
    url= arg['domain'],
    data=postdata
    )
  html = openurl(req).read().decode('utf-8')

  thisurl  = 'http://reg.163.com/Main.jsp?username=' + arg['username']
  html = openurl(thisurl).read().decode('utf-8')
  # 获取随机key
  thisurl = 'http://entry.mail.163.com/coremail/fcg/ntesdoor2?verifycookie=1&lightweight=1&from=urs'

  html = openurl(thisurl).read().decode('utf-8')

  patt = re.compile(r'.*?@163.com&sid=(.*?)&from.*?')
  sid = patt.search(html);
  sid = sid.group(1)

  # 获取sid
  thisurl = 'http://mail.163.com/js6/main.jsp?sid=' + sid
  html = openurl(thisurl).read().decode('utf-8')
  thisurl = 'http://mail.163.com/js6/s?sid=' + sid + '&func=mbox:listMessages&topNav_mobileIcon_show=1&TopTabReaderShow=1&TopTabLofterShow=1'


  # 获取邮件key --- 可以读取看看,实际上是一个类似xml的表,所有的邮件都在这里,我们需要的是key,这里是抽取的第一封邮件的key
  html = openurl(thisurl).read().decode('utf-8')

  patt = re.compile(r'.*?name="id">(.*?)</string>.*?')
  key =  patt.search(html);
  key = key.group(1)

  # 获取邮件内容
  thisurl = 'http://mail.163.com/js6/read/readhtml.jsp?mid=' + key
  html = openurl(thisurl).read().decode('utf-8')

  # 测试输出
  print(html)
  # 假设返回假,,这个验证可以最后加上
  flag = True
  #if 'succeedhandle_login' in html:
    #flag = True
  return flag


# 这里是开始,我懒得缩进了 if __name__ == '__main__':
# 用户名 及 密码
while True:
  user = input('input your username:')
  pwd = input('input your password:')
  if len(user) != 0 and len(pwd) != 0:
    break
  print('输入错误')



# 测试网站
dom='https://reg.163.com/logins.jsp'
try:
  flag = login_163(username=user,password=pwd,domain=dom)
  if not flag:
    print('读取失败!')
    exit(0)
  else:
    print('读取成功')

except Exception as e:
   print('Error:',e)

反正大致过程就是上面那样,,,很标准的 post登陆,之后 163 的页面比较特殊,具体可以自己去试试。

那个key页面是抓包之后找到的,通过那个key就能获得每一封邮件了。

整个代码是从一份功能代码中抽出来,因为剩下的内容涉及xxx,所以不发了。

本代码为自己所写,自己抓包测的,没有任何参考, 如有雷同,绝逼是被抄袭。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Python使用SMTP发送邮件(163,yeah等网易邮箱已测试可以)

#! /usr/bin/env python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText m...

Python 3 邮件的接收(IMAP)

因为前段时间在使用Ubuntu的时候,不想在GUI下接收邮件所以就打算自己写一个在命令行下接收邮件的程序,考虑到开发效率问题所以就直接用Python来写了。 (开发环境是Python3 + Ubun...

Wake-On-Lan with Python 3.x

Example that works with python 3.x in ActiveState Code recipes collection:  #!/usr/bin/env > ...

Python 3.x-解决unable to find vcvarsall.bat问题

Python 3.x在导入第三方模块时出现 unable to find vcvarsall.bat 问题,本文意在解决该问题。该问题的产生是在windows环境中,python 的 Setup需要调...

VS2010 + cocos2dx 2.X版本 + python 3

Cocos2dx就不废话介绍了, 非常火的游戏引擎,关键是它开源,可以免费下载、学习、开发,不用搞这么多激活的东西。下面以Cocos2dx 2.x为例说明这个平台的一些基本东西。虽然现在Cocos2d...

Python 3.x之数据库框架Sqlalchemy操作SQlite(续)

接着前面讲解的Sqlalchemy框架。再举个例子。如下所示: 这个例子是参考别人的Code的。 __author__ = 'minggxu9' import sqlalchemy from sq...

廖雪峰Python 3.X 教程

Python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。 现在,全世界差不多有600多种编程语言,但流行的编...

Python 3.x 新特性及10大变化

一、print() and exec() 函数python旧版本里,print和exec是作为一语句出现,可以用print “Hello,World!”, 来打印一个语句,在新版本里,print()和...

Python 3.x标准模块库目录

文本 1. string:通用字符串操作 2. re:正则表达式操作 3. difflib:差异计算工具 4. textwrap:文本填充 5. unicodedata:Unicode字符数...

Python 3.x基于Svn补丁日志自动生成Java项目补丁包

1. 前言之前打补丁的方法一直是将项目编译后的文件全部拷贝出来,然后再删除不必要的文件,经常会为了一个小BUG或其它什么的打补丁,然后就一直删删删。然而作为一名爱“偷懒”的程序猿,能让代码做的,就坚决...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)