linfinity

一、发送邮件

1、需求

在 PHP 应用开发中,往往需要验证用户邮箱、发送消息通知,而使用 PHP 内置的 mail() 函数,则需要邮件系统的支持。

如果熟悉 IMAP/SMTP 协议,结合 Socket 功能就可以编写邮件发送程序了,不过开发这样一个程序并不容易。

因此在实际开发我们可以借助第三方提供的PHPMailer 封装类,使用它可以更加便捷的发送邮件,免去了我们很多额外的麻烦。

 

2、分析发送邮件的流程

 服务器打包好邮件内容->第三方邮件服务器->用户邮箱

 

3、第三方邮箱服务器

PHPMailer 是一个封装好的 PHP 邮件发送类,支持发送 HTML 内容的电子邮件,以及可以添加附件发送,并不像 PHP 本身 mail() 函数需要服务器环境支持,您只需要设置邮件服务器以相关信息就能实现邮件发送功能。因此我们需要借助一个第三方邮箱服务器来完成我们的工作,如163邮箱、qq邮箱都可以。下面我们以163邮箱为例。

 

1申请163邮件服务器的发送邮件授权码

首先我们需要在163的邮箱里面先申请发送邮件服务:http://email.163.com/


2)开启SMTP 协议

所有的主流邮箱都支持 SMTP 协议,但并非所有邮箱都默认开启,您可以在邮箱的设置里面手动开启。

第三方服务在提供了账号和密码之后就可以登录 SMTP 服务器,通过它来控制邮件的中转方式。

 

 3)开始发送邮件

我们使用PHPMailer这个类进行邮件的发送,先将如下文件拷贝到项目目录中

 

<?php
//发送邮件:以我的163邮箱,给我的QQ邮箱发送邮件
//引入需要的核心类文件
require \'./PHPMailer/PHPMailer.class.phpmailer.php\';
//实例化对象
$mail = new PHPMailer();

//3.设置属性,告诉我们的服务器,谁跟谁发送邮件
$mail -> IsSMTP();			//告诉服务器使用smtp协议发送
$mail -> SMTPAuth = true;		//开启SMTP授权
$mail -> Host = \'smtp.163.com\';	//告诉我们的服务器使用163的smtp服务器发送
$mail -> From = \'dick@163.com\';	//发送者的邮件地址
$mail -> FromName = \'dick\';		//发送邮件的用户昵称
$mail -> Username = \'dick\';	//登录到163邮箱的用户名、账号
$mail -> Password = \'password\';	//第三方登录的授权码,在邮箱里面设置

//编辑发送的邮件内容
$mail -> IsHTML(true);		//发送的内容使用html编写
$mail -> CharSet = \'utf-8\';		//设置发送内容的编码
$mail -> Subject = \'静夜思\';	//设置邮件的主题、标题
$mail -> MsgHTML(\'床前明月光,疑是地上霜。。。\');//发送的邮件内容主体
//告诉服务器接收人的邮件地址
$mail -> AddAddress(\'10001qq.com\');
//调用send方法,执行发送
$result = $mail -> Send();

if($result){
    echo \'ok\';
}else{
    echo $mail -> ErrorInfo;
}

 

4)封装邮件发送类

发送邮件的代码基本固定,所以为了以后方便使用,我们可以将其封装成一个工具类。

将发送邮件的代码封装到Email.class.php类中,将可能会变化的内容保存到配置文件中,例如发送邮件主机地址、邮箱账号等

<?php


/*
 * 使用PHPMailer发送邮件的代码
 */
class Email
{
    //发送邮件
    //参数1:邮件的标题
    //参数2:邮件的内容
    //参数3:接收者的邮箱地址
    public static function send($title,$content,$getter)
    {
        //发送邮件:以我的163邮箱,给我的QQ邮箱发送邮件
        //引入需要的核心类文件        
        //实例化对象        
        $mail = new PHPMailer();
        
        //3.设置属性,告诉我们的服务器,谁跟谁发送邮件
        $mail -> IsSMTP();            //告诉服务器使用smtp协议发送
        $mail -> SMTPAuth = true;        //开启SMTP授权
        $mail -> Host = $GLOBALS[\'config\'][\'email_host\'];    //告诉我们的服务器使用163的smtp服务器发送
        $mail -> From = $GLOBALS[\'config\'][\'sender\'];    //发送者的邮件地址
        $mail -> FromName = $GLOBALS[\'config\'][\'nickname\'];    //发送邮件的用户昵称
        $mail -> Username = $GLOBALS[\'config\'][\'account\'];    //登录到163邮箱的用户名、账号
        $mail -> Password = $GLOBALS[\'config\'][\'token\'];    //第三方登录的授权码,在邮箱里面设置
        
        //编辑发送的邮件内容
        $mail -> IsHTML(true);        //发送的内容使用html编写
        $mail -> CharSet = \'utf-8\';        //设置发送内容的编码
        $mail -> Subject = $title;    //设置邮件的主题、标题
        $mail -> MsgHTML($content);//发送的邮件内容主体
        //告诉服务器接收人的邮件地址
        $mail -> AddAddress($getter);
        //调用send方法,执行发送
        $result = $mail -> Send();
        
        if($result){
            return true;
        }else{
            return $mail -> ErrorInfo;
        }
    }
}
Email.class.php

 

二、发送短信

1、发送短信流程

 由于业务中需要写登录注册的API的接口,所以了解了下手机号注册的前后端交互的流程;

(1)用户操作客户端点击发送验证码,(然后客户端ajax发送请求,并且按钮处于60s静默时间)

(2)后端逻辑层,接受传递过来的手机号,验证格式是否合法,进入数据库匹配是否存在

(3)生成验证码,存在session中,然后curl发送到第三方的短信接口链接中

(4)配置第三方短信平台,向指定手机号用户发送验证码信息

 

 

2、第三方平台

发送短信需要借助第三方平台,可以选择的平台有很多,其原理都差不多类似,下面以某平台为例实现。

(1)注册平台账号

http://www.yuntongxun.com/user/reg/init

 

(2)进入产品与服务,可以查看其配套文档

(3)将发送短信的核心类:CCPRestSmsSDK.php 拷贝到项目目录

(4) 开启CURL,因为发送短信使用到了PHP的一个扩展:curl

(5) 后台逻辑开发

核心:创建验证码 -> 封装POST请求函数 -> 发送验证码到第三方平台 -> 再由第三方转发至用户的手机

一般第三方平台会提供使用demo,直接复制修改使用即可

(6)在项目中注册用户时发送短信验证码

  由于短信是收费的,为了将来能够统计发送的短信数量,其次将来还要验证短信的有效期等,所以我们要将验证码单独保存

 由于一个用户可以发送多条短信用户和短信之间是一对多的关系

 

 

 

分类:

技术点:

相关文章: