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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
PHP队列用法实例
Nov 05 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php简单获取复选框值的方法
May 11 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
php实现数据库的增删改查
Feb 26 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
PHP异步进程助手async-helper
Feb 05 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
php中字符串和整数比较的操作方法
Jun 06 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
理解和运用PHP中的多态性[译]
2011/08/02 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
Python模块学习 re 正则表达式
2011/05/19 Python
python list语法学习(带例子)
2013/11/01 Python
python 连接sqlite及简单操作
2017/06/30 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
电钳专业个人求职信
2014/01/04 职场文书
幼儿教师培训感言
2014/03/08 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
个人更名证明
2015/06/23 职场文书
导游词之太湖
2019/10/08 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL