php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录

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

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

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

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

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

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

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

 

1.GMAIL

PHP code
    
    
    
    
<? php 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 ( ' /<input/s*type="hidden"/s*name=" ' . $v . ' "/s*id=" ' . $v . ' "/s*value="(.*?)"/s*//>/i ' , $contents , $matches ); if ( ! empty ( $matches )) { $ $v = $matches [ 1 ]; $matches = array (); } } $server = ' mail ' ; preg_match ( ' /<input/s*type="hidden"/s*name="GALX"/s*value="(.*?)"/s*//>/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/"?><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_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/s*name=/"EMAILREF/">(.*)<//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 '您的邮箱中尚未有联系人'; } */ $contents = substr ( $contents , strlen ( ' while (true); &&&START&&& ' ) , - strlen ( ' &&&END&&& ' )); return $contents ; } } $gamil = new GMAIL; $res = $gamil -> getAddressList( ' [email protected] ' , ' 123456 ' ); echo $res ; ?> < script type = " text/javascript " > var data = <? php echo $res ; ?> alert(data[ ' Body ' ]); // json数据 </ script >



2.HOTMAIL(MSN)
PHP code
        
        
        
        
<? php 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 ( ' /<input/s*type="hidden"/s*name="PPFT"/s*id="(.*?)"/s*value="(.*?)"/s*//>/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 ( ' /<a/s*href=/"(.*?)/"/s*>/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( ' [email protected] ' , ' 123456 ' ); echo $res ; ?> < script type = " text/javascript " > var data = <? php echo $res ; ?> alert(data[ ' ic1 ' ][ 6 ]); alert(data[ ' ic1 ' ][ 3 ]); </ script >

3.YAHOO
PHP code
            
            
            
            
<? php 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 ( ' /<input/s*type="hidden"/s*name=". ' . $v . ' "/s*value="(.*?)"/s*>/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 ' <pre> ' ; 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( ' [email protected] ' , ' 123456 ' ); ?> < script type = " text/javascript " > var data = <? php echo $res ; ?> var obj1 = data[ 0 ]; alert(data[ 0 ][ ' contactName ' ]); </ script >

http://topic.csdn.net/u/20101007/23/90d1bd3d-9b28-4710-ae1d-f7e795d094b3.html

你可能感兴趣的:(PHP,Yahoo,ssl,Cookies,url,Gmail)