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生成html分页列表的代码
Mar 18 PHP
PHP DataGrid 实现代码
Aug 12 PHP
php mail to 配置详解
Jan 16 PHP
ThinkPHP分页实例
Oct 15 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
php中curl使用指南
Feb 05 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP控制循环操作的时间
Apr 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP查询网站的PR值
2013/10/30 PHP
php从字符串创建函数的方法
2015/03/16 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
使用Python来开发微信功能
2018/06/13 Python
python得到windows自启动列表的方法
2018/10/14 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
Python实现Hash算法
2022/03/18 Python