邮箱接口的使用
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'); } }
效果图:
相关文章推荐
- fastjson处理接口时的一个问题
- 局域网与广域网接口标准
- RJ-45接口信号定义
- DVI 视频接口图文解析
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 如何设置域名接口
- 邮箱网站不能用mail.xxx.com:8888的方式访问原因
- 通过C#实现自动售货机接口
- C#中IEnumerable接口用法实例分析
- C#中实现判断某个类是否实现了某个接口
- C#隐式/显示实现接口方法详解
- C#微信开发之获取接口调用凭据
- C#实现两接口中同名方法实例分析
- 详解C#中的接口属性以及属性访问器的访问限制
- C#中的ICustomFormatter及IFormatProvider接口用法揭秘
- C#接口实现方法实例分析
- 基于C# 中可以new一个接口?的问题分析
- C#处理和对接HTTP接口请求的方法
- C#抽象类和接口的区别分析
- hotmail,MSN 邮箱无法登陆的解决方法 秘密通道