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边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP实现动态添加XML中数据的方法
Mar 30 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
thinkphp缓存技术详解
2014/12/09 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
JS之相等操作符详解
2016/09/13 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
PyTorch安装与基本使用详解
2020/08/31 Python
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
大学生军训广播稿
2014/01/24 职场文书
干部现实表现材料
2014/02/13 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
商超业务员岗位职责
2015/02/13 职场文书
个人德育工作总结
2015/03/05 职场文书
初中化学教学反思
2016/02/22 职场文书
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS