php 对接 hotmail邮箱,php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍

最近一直在忙,赶在这个假期结束的时候,发表一下此文,为了是让这些源码开源出来

当然这些方法可能不可取,但大致应该是这种方向了吧,由于目前做的一个UCHOME港台的站点

咱们策划说要改一下好友邀请里面的显示方式,开始我也没有在意,当时就说行!

到了弄这个的时候才发现,UCH里面的这个地方是用漫游型式做的,让人很是无解,啥都改不了!

唉,既然都答应了说可以,现在实际情况不行了,所以觉得不好意思,为了快速解决这问题,在GOOGLE,

百度上搜了个遍,结果又出忽意料,就一个126邮箱的开源例子,其它的都没有,有一牛哥留着QQ说要其它的源码,

可以加QQ买!不对此人评论了!俺花了点时间,整了整,结果就幸运的弄出来了几个,因为时间有限,目前手上的项目一直在弄,所以就没有管其它的,现在给出 GMAIL,HOTMAIL(MSN),YAHOO的邮箱联系人的PHP源代码:

1.GMAIL

define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) );   //定义COOKIES存放的路径,要有操作的权限

define( "TIMEOUT", 1000 ); //超时设定

class GMAIL

{

private function login($username, $password)

{

//第一步:模拟抓取登录页面的数据,并记下cookies

$cookies = array();

$matches = array();

//获取表单

$login_url = "https://www.google.com/accounts/ServiceLoginAuth";

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$contents = curl_exec($ch);

curl_close($ch);

//模拟参数

$name = array('dsh','timeStmp','secTok');

foreach($name as $v) {

preg_match('//i', $contents, $matches);

if(!empty($matches)) {

$$v = $matches[1];

$matches = array();

}

}

$server = 'mail';

preg_match('//i', $contents, $matches);

if(!empty($matches)) {

$GALX = $matches[1];

$matches = array();

}

$timeStmp = time();

//第二步: 开始登录

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ServiceLoginAuth");

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

curl_setopt($ch, CURLOPT_POST, 1);

$fileds = "dsh=$dsh&Email=".$username."&Passwd={$password}&GALX=$GALX&timeStmp=$timeStmp&secTok=$secTok&signIn=Sign in&rmShown=1&asts=&PersistentCookie=yes";

curl_setopt($ch, CURLOPT_POSTFIELDS, $fileds);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$str = curl_exec($ch);

curl_close($ch);

//第三步:check Cookies即也算是个引导页面

$ch = curl_init("https://www.google.com/accounts/CheckCookie?chtml=LoginDoneHtml");

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIEJAR);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

$str2 = curl_exec($ch);

curl_close($ch);

if (strpos($contents, "安全退出") !== false)

{

return FALSE;

}

return TURE;

}

//获取邮箱通讯录-地址

public function getAddressList($username, $password)

{

if (!$this->login($username, $password))

{

return FALSE;

}

//开始进入模拟抓取

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://mail.google.com/mail/contacts/data/contacts?thumb=true&groups=true&show=ALL&enums=true&psort=Name&max=300&out=js&rf=&jsx=true");  //out=js返回json数据,不设置返回为xml数据

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

/*  对于返回xml数据时需要此设置

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));

$str = "<?xml version=/"1.0/"?>pab:searchContactsFNtrueuser:getSignaturespab:getAllGroups";

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

*/

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

$contents = curl_exec($ch);

curl_close($ch);

//die($contents);

//get mail list from the page information username && emailaddress

/* 对于返回xml数据时的处理

preg_match_all("/(.*)/string>/Umsi",$contents,$mails);

preg_match_all("/(.*)/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 '您的邮箱中尚未有联系人';

}

*/

$contents = substr($contents, strlen('while (true); &&&START&&&'),  -strlen('&&&END&&& '));

return $contents;

}

}

$gamil = new GMAIL;

$res = $gamil->getAddressList('username@163.com','123456');

echo $res;

?>

2.HOTMAIL(MSN)

define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) );   //定义COOKIES存放的路径,要有操作的权限

define( "TIMEOUT", 1000 ); //超时设定

class MSN

{

function getAddressList($username, $password)

{

//第一步:模拟抓取登录页面的数据,并记下cookies

$cookies = array();

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_URL, "http://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=".time()."&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en");

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$str = curl_exec($ch);

curl_close($ch);

//参数的分析

$matches = array();

preg_match('//i', $str, $matches);

$PPFT = $matches[2];

preg_match('/srf_sRBlob=/'(.*?)/';/i', $str, $matches);

$PPSX = $matches[1];

$type = 11;

$LoginOptions = 3;

$Newuser = 1;

$idsbho = 1;

$i2 = 1;

$i12 = 1;

$i3 = '562390';

$PPSX = 'Pa';

//合并参数

$postfiles = "login=".$username."&passwd=".$password."&type=".$type."&LoginOptions=".$LoginOptions."&Newuser=".$Newuser."&idsbho=".$idsbho."&i2=".$i2."&i3=".$i3."&PPFT=".$PPFT."&PPSX=".$PPSX."&i12=1";

//第二步:开始登录

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

curl_setopt($ch, CURLOPT_URL, 'https://login.live.com/ppsecure/post.srf?wa=wsignin1.0&rpsnv=11&ct='.(time()+5).'&rver=6.0.5285.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2052&id=64855&mkt=en&bk='.(time()+715)); //此处的两个time()是为了模拟随机的时间

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postfiles);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

//curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($ch);

curl_close($ch);

if( stripos($content,'WLWorkflow') !== FALSE ) {     //WLWorkflow登录页面JS

return false;      //登录失败

}

//获取location链接

$matches = array();

preg_match('/window.location.replace/(/"(.*?)/"/)/i', $content, $matches);

$url_contiune_1 = $matches[1]; //接下来的链接

if(!$url_contiune_1) {

return false;

}

//第三步: 进入引导页面

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

curl_setopt($ch, CURLOPT_URL, $url_contiune_1);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$content_2 = curl_exec($ch);

//echo $postfiles;

curl_close($ch);

//获取redicturl链接

$matches = array();

preg_match('//i', $content_2, $matches);

$url_contiune_2 = $matches[1]; //接下来的链接

if(!$url_contiune_2) {

return false;

}

//跳过进入首页

/*

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

curl_setopt($ch, CURLOPT_URL, $url_contiune_2);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 1000);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$content_3 = curl_exec($ch);

curl_close($ch);

*/

//获取邮箱请求基址 读取host

$matches = array();

preg_match('/(.*?)(.*?)//(.*?)/i', $url_contiune_2, $matches);

$url_contiune_3 = trim($matches[1]).'//'.trim($matches[2]); //首页定义的站点基址

$url_4 = $url_contiune_3.'/mail/ContactMainLight.aspx?n=435707983'; //n后面的数字是随机数

if(!$url_contiune_3) {

return false;

}

//第四步: 开始获取邮箱联系人

//base  $url_4

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);

curl_setopt($ch, CURLOPT_URL, $url_4);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$str = curl_exec($ch);

//分析数据 (此处的数据因为hotmail的JS处理机制,所以在页面上看不出来,源码上可以看到数据)

return $this->hanlde_date($str);

}

function hanlde_date($data) {

$new_str = array();

if(!empty($data)) {

$ops_start = stripos($data,'ic_control_data');

$ops_end = stripos($data,';',$ops_start);

$new_str = substr($data, $ops_start + strlen('ic_control_data = '), $ops_end - $ops_start - strlen('ic_control_data = ') );

return $new_str; //返回JSON对象

} else {

return array();

}

}

}

$msn = new MSN;

$res = $msn->getAddressList('username@111.com','123456');

echo $res;

?>

3.YAHOO

define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) );   //定义COOKIES存放的路径,要有操作的权限

define( "TIMEOUT", 1000 ); //超时设定

class YAHOO

{

private function login($username, $password)

{

//第一步:模拟抓取登录页面的数据,并记下cookies

$cookies = array();

$matches = array();

//获取表单

$login_url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.done=http%3A%2F%2Fwww.yahoo.com%2F";

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$contents = curl_exec($ch);

curl_close($ch);

//构造参数

$name = array('tries','src','md5','hash','js','last','promo','intl','bypass','partner','u','v','challenge','yplus','emailCode','pkg','stepid','ev','hasMsgr','chkP','done','pd','pad','aad');

$postfiles = array();

$matches = array();

foreach($name as $v) {

preg_match('//i', $contents, $matches);

if(!empty($matches)) {

$postfiles['.'.$v] = $matches[1];

$matches = array();

}

if($v == 'pd') {

$postfiles['.'.$v] = urlencode($postfiles['.'.$v]);

}

}

$postfiles['pad'] = 5;

$postfiles['aad'] = 6;

$postfiles['login'] = urlencode($username);

$postfiles['passwd'] = $password;

$postfiles['.persistent'] = 'y';

$postfiles['save'] = '';

$postfiles['.done'] = urlencode($postfiles['.done']);

//$postfiles['.pd'] = urlencode($postfiles['.pd']);

$postargs = '';

foreach($postfiles as $k => $v){

$postargs .= $k.'='.$v.'&';

}

$postargs = substr($postargs,0,-1);

$request = "https://login.yahoo.com/config/login?";

//开始登录

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_URL, $request);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postargs);

curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);

curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$contents = curl_exec($ch);

curl_close($ch);

if (stripos($contents,'submit') != FALSE)

{

return 0;

}

return 1;

}

//获取邮箱通讯录-地址

public function getAddressList($username, $password)

{

if (!$this->login($username, $password))

{

return 0;

}

//开始进入模拟抓取

//get mail list from the page information username && emailaddress

$url = "http://address.mail.yahoo.com/";

$data = array( );

if ( !$data = $this->hanlde_date( $url, $names, $emails) )

{

return FALSE;

}

echo '

';

print_r($data);

return $data;

}

function hanlde_date( $url, &$names, &$emails)

{

$ch = curl_init( );

curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );

curl_setopt( $ch, CURLOPT_URL, $url );

curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$contents = curl_exec($ch);

curl_close($ch);

$temparr = array();

preg_match_all('/InitialContacts/s*=/s*(.*?);/i',$contents,$temparr);

return $temparr[1][0].';';       //匹配出JSON对象数组

}

}

$yahoo = new YAHOO;

$res = $yahoo->getAddressList('username@yahoo.com.cn','123456');

?>

注:163,126在网上的源码都有,在此就不一一的列出来了哦

当然此代码是自己个人的拙作,只是为了给大家此类问题做一个指引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值