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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
PHP如何编写易读的代码
Jul 10 PHP
PHP连接access数据库
Mar 27 PHP
PHP 定界符 使用技巧
Jun 14 PHP
关于页面优化和伪静态
Oct 11 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 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 JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
Python运用于数据分析的简单教程
2015/03/27 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
建筑经济管理专业求职信分享
2014/01/06 职场文书
考试不及格的检讨书
2014/01/22 职场文书
药品促销活动方案
2014/02/14 职场文书
元旦活动感言
2014/03/08 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
2014年纪委工作总结
2014/12/05 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
会计出纳岗位职责
2015/03/31 职场文书
开学典礼致辞
2015/07/29 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers