php接口编程(一)邮件发送

我们做项目会遇到发邮件的需求,它通常用来实现用户的注册。
而邮件发送原理其实很简单,首先在自己邮箱账号方的邮件服务器开启POP3服务,这里以163邮箱为例子,如下图
php接口编程(一)邮件发送_第1张图片
php接口编程(一)邮件发送_第2张图片
php接口编程(一)邮件发送_第3张图片
获取第三方客户端的授权码,以上为了方便我用了以前截图展现,当然新浪邮箱开启POP3服务更容易,一步到位。
实现流程如下:
1、先改用户数据表
增加email,status(状态默认为0,1为已激活)和active_code(激活码)
2、下载PHPMailer,用php代码实现邮件发送
自行从网上PHPMailer,在同目录下创建一个eamil.php文件
php接口编程(一)邮件发送_第4张图片
php接口编程(一)邮件发送_第5张图片
email.php具体代码:

IsSMTP();   //使用smtp方式发生邮件                     
	$mail->SMTPAuth   = true; //使用用户信息认证              
	$mail->Host       = 'smtp.163.com';//设置发件箱的smtp邮件服务器地址   	   
	$mail->Username   = 'phpresources';//用户名  		
	$mail->Password   = 'qazwsxedc123';//密码 此密码时第三方的客户端密码
	/*内容信息*/
	$mail->IsHTML(true);
	$mail->CharSet    ="UTF-8";			
	$mail->From       = '[email protected]';	//发件箱 		
	$mail->FromName   ="he2019";	//发件人的昵称
	$mail->Subject    = '邮件发送使用phpmailer 主题'; //主题
	$mail->MsgHTML('邮件发送使用phpmailer 正文');//具体邮件的正文
  
	$mail->AddAddress('[email protected]');  //给指定的用户发送邮件
	$mail->AddAttachment("test.png"); //追加附件
	$res = $mail->Send();
	var_dump($res);
?>

访问该文件
php接口编程(一)邮件发送_第6张图片
php接口编程(一)邮件发送_第7张图片
完成,接下来把测试好的邮件发送导入到tp3项目中使用
1、把PHPMailer放在项目同级的目录,创建个邮件发送方法(最后是公共方法)


//发送邮件
function sendEmail($to,$Subject,$body)
{
    require '../PHPMailer/class.phpmailer.php';
    $mail             = new PHPMailer();
    /*服务器相关信息*/
    $mail->IsSMTP();   //使用smtp方式发生邮件                     
    $mail->SMTPAuth   = true; //使用用户信息认证              
    $mail->Host       = 'smtp.163.com';//设置发件箱的smtp邮件服务器地址         
    $mail->Username   = 'phpresources';//用户名        
    $mail->Password   = 'qazwsxedc123';//密码 此密码时第三方的客户端密码
    /*内容信息*/
    $mail->IsHTML(true);
    $mail->CharSet    ="UTF-8";         
    $mail->From       = '[email protected]'; //发件箱       
    $mail->FromName   ="金航商城管理员"; //发件人的昵称
    $mail->Subject    = $Subject; //主题
    $mail->MsgHTML($body);//具体邮件的正文
  
    $mail->AddAddress($to);  //给指定的用户发送邮件

    return $mail->Send();
}

2、写方法实现邮件发送

控制器操作方法
	//实现用户使用邮箱进行注册
	public function registbyemail()
	{
		if(IS_GET){
			$this->display();
		}else{
			$username =I('post.username');
			$password =I('post.password');
			$email =I('post.email');
			//实例化模型对象 调用方法入库
			$model =D('User');
			$res = $model->registbyemail($username,$password,$email);
			if($res == -1){
				$this->ajaxReturn('用户名重复');
			}else if($res == -2){
				$this->ajaxReturn('邮箱重复');
			}
			//发送邮件
			//拼接具体的邮件内容中的连接地址
			$link = 'http://demo.com'.U('active').'?user_id='.$res['user_id'].'&active_code='.$res['active_code'];
			sendemail($email,'商城用户激活邮件',$link);
			$this->ajaxReturn(array(‘’OK'));
		}
	}
控制器对应的模型方法

	//实现用户使用邮箱进行注册
	public function registbyemail($username,$password,$email)
	{
		//检查用户名是否可用
		$info = $this->where("username = '$username'")->find();	
		if($info){
			return -1;
		}
		//检查邮箱是否重复
		$info = $this->where("email = '$email'")->find();	
		if($info){
			return -2;
		}

		//生成盐
		$salt=rand(100000,999999);
		//生成双重MD5之后的密码
		$db_password= md5(md5($password).$salt);
		$data=array(
			'username'=>$username,
			'password' =>$db_password,
			'salt'=>$salt,
			'email'=>$email,
			'status'=>0,
			'active_code'=>uniqid(),//生成激活码
		);
		$user_id = $this->add($data);
		$data['user_id']=$user_id;
		return $data;
	}


php接口编程(一)邮件发送_第8张图片
用户注册输入正确的邮箱就能发送邮件,因为项目要实现用户邮箱注册,注册成功后需用户回到自己邮箱点击激活,我们发送邮件拼接的链接地址$link的actice_code是激活码(是注册时生成存到数据库里),用户status为0,当用户点击邮箱激活码才能让用户登录,所以需要实现具体用户的激活的方法,用户激活后status为1可正常登录


	//实现具体用户的激活
	public function active()
	{
		$user_id = I('get.user_id');
		$active_code = I('get.active_code');
		$model =D('User');
		$user_info = $model->where('id='.$user_id)->find();

		if(!$user_info){
			echo '参数错误';exit();
		}
		if($user_info['status']==1){
			echo '已经激活';exit();
		}
		if($active_code != $user_info['active_code']){
			echo '激活码错误';exit();
		}
		//修改用户的状态
		$model->where('id='.$user_id)->setField('status',1);
        $this->redirect("/User/login");
	}

你可能感兴趣的:(php接口编程(一)邮件发送)