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

hudie631489527 2010-10-07 11:16:21
加精
最近一直在忙,赶在这个十一假期结束的时候,发表一下此文,为了是让这些源码开源出来

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

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

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

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

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

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



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×tmp=$timeStmp§ok=$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>



...全文
36284 221 打赏 收藏 转发到动态 举报
写回复
用AI写文章
221 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
好强大 收藏了
  • 打赏
  • 举报
回复
请问 如果 有验证码 怎么过? qq邮箱好像有时就会有验证码!!
u010450678 2013-04-25
  • 打赏
  • 举报
回复
very good
aleo 2013-03-01
  • 打赏
  • 举报
回复
学习了。。。。。。
usam111 2013-02-24
  • 打赏
  • 举报
回复
直接用了哈 呵呵
liruiiuril 2013-02-10
  • 打赏
  • 举报
回复
不会用啊,我把源码复制到记事版里,把文件后缀改为html.呵呵。我是不是天真了?
wangcj1 2013-01-24
  • 打赏
  • 举报
回复
收了,都是大神啊
whpdm2 2013-01-05
  • 打赏
  • 举报
回复
阿城守候 2013-01-03
  • 打赏
  • 举报
回复
学习了,留着以后复习
gzq335466572 2012-12-17
  • 打赏
  • 举报
回复
好长好长,学习了
iccnp 2012-11-07
  • 打赏
  • 举报
回复
进来学习个。
q707002451 2012-09-27
  • 打赏
  • 举报
回复
过来看看
黄药师-掌风 2012-09-06
  • 打赏
  • 举报
回复
不错啊 有QQ的模拟登陆 不
tanshikao 2012-08-22
  • 打赏
  • 举报
回复
收藏了,谢谢!
piayong 2012-07-26
  • 打赏
  • 举报
回复
qq邮箱怎么获取呀?
「已注销」 2012-07-09
  • 打赏
  • 举报
回复
lz,你有sohu和sina没?急需ing。。。vkey24@126.com
vhuss 2012-06-24
  • 打赏
  • 举报
回复
学习了很好啊。
weijian1232012 2012-05-14
  • 打赏
  • 举报
回复
收藏,顶一个
topcodingmaster 2012-04-07
  • 打赏
  • 举报
回复
have a look!
爱辣的胖子 2011-12-29
  • 打赏
  • 举报
回复
感谢LZ,要点就是这个东西,我懒得每次登陆都要输入帐户、密码,这个解决大麻烦了
加载更多回复(164)

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧