您的位置:首页 > 其它

邮箱接口的使用

2017-02-07 00:00 141 查看

1.原理:



2 .SMTP(Simple Mail Transfer Protocol)
SMTP(Simple Mail Transfer Protocol):
即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
首先需要有163邮箱,因为我们需要使用163邮箱服务器

php中实现邮件发送:

中大公司自己搭建自己的邮件服务器,也可以使用免费的邮件服务器(smtp.163.com), 小公司在使用.
163 邮箱



如何使用:
1.打开smtp服务,并设置授权密码





设置授权密码(这个授权码实在php发送邮件的时候使用的与登录密码不能一致)







下载phpmailer





封装发送邮件的方法:

/**
*
* @param type $toEmail     接收人邮箱的地址
* @param type $subject     邮箱标题
* @param type $content     邮箱内容
*/
function sendEmail( $toEmail , $subject ,$content ) {
require("./PHPMailer/class.phpmailer.php"); //下载的文件必须放在该文件所在目录
$mail = new PHPMailer(); //建立邮件发送类
$mail->IsSMTP(); // 使用SMTP方式发送
$mail->CharSet = 'UTF-8'; // 设置邮件的字符编码
$mail->Host = 'smtp.163.com'; // 自己注册的邮箱服务器地址
$mail->SMTPAuth = true; // 启用SMTP验证功能
$mail->Username = 'liuchenworking@163.com'; // 163用户名(请填写完整的email地址)
$mail->Password = 'nishizhuma1'; // 发件人邮箱密码

$mail->From = 'liuchenworking@163.com'; //邮件发送者email地址
$mail->FromName = '京西商城';
$mail->AddAddress( $toEmail ); //收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名")
//$mail->AddReplyTo("", "");
//$mail->AddAttachment("index.php"); // 添加附件
$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式
$mail->Subject = $subject; //邮件标题
$mail->Body = $content; //邮件内容
//$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; //附加信息,可以省略
if (!$mail->Send()) {
return false;
}
return true;
}

视图代码如下:

<layout name="Index/header_footer" />
<div class="main-div">
<form name="main_form" method="POST" action="__SELF__" enctype="multipart/form-data" onSubmit="return Validator.Validate(this,3)" >
<table cellspacing="1" cellpadding="3" width="100%">
<tr>
<td class="label">所在角色:</td>
<td>
<select name="role_id" style="width:261px;">
<foreach name='role' item = 'vo'>
<option value="{$vo.id}" >
{$vo.name}
</option>
</foreach>
</select>
</td>
</tr>
<tr>
<td class="label">账号:</td>
<td>
<input type="text" name="username" dataType='Require' value="{$my['username']}"  <if condition=" $my ">   disabled="disabled" </if> />
</td>
</tr>
<tr>
<td class="label">密码:</td>
<td>
<input name="password" <if condition=" !$my "> dataType="SafeString" </if>   msg="密码不符合安全规则" type="password"><if condition=" $my "> 留空代表不修改密码 </if>
</td>
</tr>
<tr>
<td class="label">确认密码:</td>
<td>
<input name="repeat" dataType="Repeat" to="password" msg="两次输入的密码不一致" type="password">
</td>
</tr>
<tr>
<td class="label">真实姓名:</td>
<td>
<input type="text" name="truename" dataType='Chinese' msg="真实姓名只允许中文" value="{$my['truename']}"/>
</td>
</tr>
<tr>
<td class="label">电话号码:</td>
<td>
<input type="text" value="{$my['mobile']}" name="mobile" dataType='Mobile' />
</td>
</tr>
<tr>
<td class="label">邮 箱:</td>
<td>
<input type="text" value="{$my['email']}" name="email" dataType='Email' />
</td>
</tr>
<tr>
<td class="label">是否启用</td>
<td>
<input type="radio" name="is_use" value="1" checked="checked" />启用
<input type="radio" name="is_use" value="0"  />禁用
</td>
</tr>
<input type="hidden" name="id" value="{$Think.get.id}" />
<tr>
<td colspan="99" align="center">
<input type="submit" class="button" value=" 确定 " />
<input type="reset" class="button" value=" 重置 " />
</td>
</tr>
</table>
</form>
</div>
<js href="__VENDOR__/validator.js" />
<script>
</script>

效果图如下:



控制器方法代码如下:

/**
* 添加管理员表数据内容
*/
public function add(){

if(IS_POST){

$this->_add();
}
//获取所有的角色信息
$result = D('Role')->select();
$this->assign('role' , $result);
//头部信息
$this->setPageBtn('添加管理员' , '管理员列表'  , U('index') );

$this->display('info');

}

/**
* 添加管理员执行操作
*/
protected function _add(){

$obj = D('Admin');

if(!$obj->create())
$this->error('创建数据失败!'.$obj->getError());

$insert_id = $obj->add();

if( $insert_id ===false ){
$this->error('插入数据失败'.$obj->getDbError ());
}else{
$this->success('插入数据成功');
//发送邮箱验证邮件
$email = I('post.email');

//给邮箱加密,发送到memcache中
$sig = md5($email);

$link = 'http://www.myjd.com/index.php/api/index/Vemail/sig/'.$sig.'/insert_id/'.$insert_id;

$content = '点击如下连接激活你的邮箱:'.$link;

sendEmail($email , '请激活你的邮箱' , $content);

//给memcache中添加此邮箱的的数据,60秒消除
$mem = new \Memcache();

$mem->connect('127.0.0.1',11211);

$mem->set($sig,1,0,60);
}
exit;
}

获取激活邮件后,点击激活的方法代码:

/**
*
* @param type $sig memcache key值
* @return boolean
*/
public function Vemail($sig , $insert_id){
//获取数据,先查看数据库中是否已经验证
$obj = D('Admin');
$result = $obj->field('is_use')->find( (int) $insert_id );
if($result['is_use']==1){
$this->success('你的验证已通过!谢谢!', '/Admin/User/index');
die;
}

$mem = new \Memcache();
$mem->connect('127.0.0.1',11211);
$times = (int)$mem->get($sig);

if($times){
//存在值的话,说明邮箱已没过期可以验证
//修改数据
$data['id'] = (int) $insert_id ;
$data['is_use'] = 1;

if($obj->data($data)->save())
$this->success('你的验证已通过!谢谢!', '/Admin/User/index');
}else{

$this->success('你的验证邮箱已过期!', '/Admin/User/index');
}
}

效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  邮箱 接口