PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】


Posted in PHP onOctober 11, 2009

在网上找了一些,大部分都已经失效,为此我重新整理了一下;特别放出126的代码,163是比较容易抓取的;126有点变态多了一次跳转,比较麻烦

<?php 
/** 
* @file class.126http.php 
* 获得126邮箱通讯录列表 
* @author jvones<jvones@gmail.com> http://www.jvones.com/blog 
* @date 2009-09-26 
**/ 
class http126 
{ 
private function login($username, $password) 
{ 
//第一步:初步登陆 
$cookies = array(); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_URL, "https://reg.163.com/logins.jsp?type=1&product=mail126&url=http://entry.mail.126.com/cgi/ntesdoor?hid%3D10010102%26lightweight%3D1%26verifycookie%3D1%26language%3D0%26style%3D-1"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$username."@126.com&password=".$password); 
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); 
curl_setopt($ch,CURLOPT_HEADER,1); 
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$str = curl_exec($ch); 
//file_put_contents('./126result.txt', $str); 
curl_close($ch); 
//获取redirect_url跳转地址,可以从126result.txt中查看,通过正则在$str返回流中匹配该地址 
preg_match("/replace\(\"(.*?)\"\)\;/", $str, $mtitle); 
$_url1 = $mtitle[1]; 
//file_put_contents('./126resulturl.txt', $redirect_url); 
//第二步:再次跳转到到上面$_url1 
$ch = curl_init($_url1); 
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIEJAR); 
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); 
curl_setopt($ch,CURLOPT_HEADER,1); 
$str2 = curl_exec($ch); 
curl_close($ch); 
if (strpos($contents, "安全退出") !== false) 
{ 
return 0; 
} 
return 1; 
} 
/** 
* 获取邮箱通讯录-地址 
* @param $user 
* @param $password 
* @param $result 
* @return array 
*/ 
public function getAddressList($username, $password) 
{ 
if (!$this->login($username, $password)) 
{ 
return 0; 
} 
$header = $this->_getheader($username); 
if (!$header['sid']) 
{ 
return 0; 
} 
//测试找出sid(很重要)和host 
//file_put_contents('./host.txt', $header['host']); 
//file_put_contents('./sid.txt', $header['sid']); 
//开始进入模拟抓取 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://".$header['host']."/a/s?sid=".$header['sid']."&func=global:sequential"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml")); 
$str = "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"func\">pab:searchContacts</string><object name=\"var\"><array name=\"order\"><object><string name=\"field\">FN</string><boolean name=\"ignoreCase\">true</boolean></object></array></object></object><object><string name=\"func\">user:getSignatures</string></object><object><string name=\"func\">pab:getAllGroups</string></object></array></object>"; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $str); 
curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); 
ob_start(); 
curl_exec($ch); 
$contents = ob_get_contents(); 
ob_end_clean(); 
curl_close($ch); 
//get mail list from the page information username && emailaddress 
preg_match_all("/<string\s*name=\"EMAIL;PREF\">(.*)<\/string>/Umsi",$contents,$mails); 
preg_match_all("/<string\s*name=\"FN\">(.*)<\/string>/Umsi",$contents,$names); 
$users = array(); 
foreach($names[1] as $k=>$user) 
{ 
//$user = iconv($user,'utf-8','gb2312'); 
$users[$mails[1][$k]] = $user; 
} 
if (!$users) 
{ 
return '您的邮箱中尚未有联系人'; 
} 
return $users; 
} 
/** 
* Get Header info 
*/ 
private function _getheader($username) 
{ 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://entry.mail.126.com/cgi/ntesdoor?hid=10010102&lightweight=1&verifycookie=1&language=0&style=-1&username=".$username."@126.com"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); //当前使用的cookie 
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); //服务器返回的新cookie 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
$content=curl_exec($ch); 
preg_match_all('/Location:\s*(.*?)\r\n/i',$content,$regs); 
$refer = $regs[1][0]; 
preg_match_all('/http\:\/\/(.*?)\//i',$refer,$regs); 
$host = $regs[1][0]; 
preg_match_all("/sid=(.*)/i",$refer,$regs); 
$sid = $regs[1][0]; 
curl_close($ch); 
return array('sid'=>$sid,'refer'=>$refer,'host'=>$host); 
} 
} 
?>

PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】 
PHP 相关文章推荐
如何对PHP程序中的常见漏洞进行攻击(上)
Oct 09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
php操作xml
Oct 27 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
php实现的CSS更新类实例
Sep 22 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
php实现文章评论系统
Feb 18 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 #PHP
PHP 日期加减的类,很不错
Oct 10 #PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 #PHP
PHP 字符串分割和比较
Oct 06 #PHP
PHP parse_url 一个好用的函数
Oct 03 #PHP
php面向对象全攻略 (十七) 自动加载类
Sep 30 #PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 #PHP
You might like
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
shiro授权的实现原理
2017/09/21 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
Python完全新手教程
2007/02/08 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python中的ctime()方法使用教程
2015/05/22 Python
详解python3百度指数抓取实例
2016/12/12 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
django rest framework 过滤时间操作
2020/07/12 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
英语系本科生求职信范文
2013/12/18 职场文书
好家长事迹材料
2014/01/23 职场文书
教师网络培训感言
2014/03/09 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
高中生操行评语大全
2014/04/25 职场文书
预备党员综合考察材料
2014/05/31 职场文书
个人向公司借款协议书
2014/10/09 职场文书
Redis keys命令的具体使用
2022/06/05 Redis