zoukankan      html  css  js  c++  java
  • php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录

    1.GMAIL
    <?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('username@163.com','123456');

    echo $res;

    ?>
    <script type="text/javascript">
    var data = <?php echo $res; ?>

    alert(data['Body']); //json数据
    </script>

    2.HOTMAIL(MSN)

    <?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('username@111.com','123456');

    echo $res;


    ?>

    <script type="text/javascript">
    var data = <?php echo $res; ?>

    alert(data['ic1'][6]);
    alert(data['ic1'][3]);
    </script>

    3.YAHOO

    <?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('username@yahoo.com.cn','123456');


    ?>
    <script type="text/javascript">
    var data = <?php echo $res; ?>
    var obj1 = data[0];
    alert(data[0]['contactName']);
    </script>

  • 相关阅读:
    Error.prototype (Errors) – JavaScript 中文开发手册
    C 库函数 – isalnum()
    git diff-files (Git) – Git 中文开发手册
    Java面试题:如何在基于Java的Web项目中实现文件上传和下载?
    HTML onload 属性
    JavaScript setDate() 方法
    Linux fsconf命令
    HTML DOM Reset disabled 属性
    wcsstr (Strings) – C 中文开发手册
    HTML area shape 属性
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2918487.html
Copyright © 2011-2022 走看看