首先要自己配置下自己所使用的smtp服务器,这里使用的是QQ的
//邮箱配置项
'SWIFT_HOST'=>'smtp.qq.com',
'SWIFT_USERNAME'=>'XXXX@qq.com',
'SWIFT_PASSWORD'=>'abrsjjqtpfgndccc',
// 验证验证码
// 通过验证码后 查找邮箱 然后将该邮箱对应的修改密码链接发过去
// 该链接链接到一个修改方法 通过寻找verify 找到用户 修改其密码
public function mima(){
// 并且设定好十分钟后才可以再发链接到邮箱
if(!empty($_POST)){
$Reader = D('reader');
$where = array();
$where['reader_email'] = I('post.reader_email');
$where['reader_name'] = I('post.reader_name');
$rst = $Reader -> where($where) -> find();
if($rst == false){
$this->redirect('Index/mima','',0.01,'<script>alert("输入错误");</script>');
exit;
}
// 如果通过了验证 账号 和 邮箱 则继续 否则redirect + 提示验证码错误
$where = array();
$where['reader_email'] = $_POST['reader_email'];
$reader = $Reader -> where($where)->find();
// 如果存在该邮箱属于用户则继续
$email = $reader['reader_email'];
$username = $reader['reader_name'];
$userpwd = $reader['reader_pwd'];
$id = $reader['id'];
$modtime = time();
//创建用于激活识别码
$token = md5($username.$userpwd.$email.$modtime);
//过期时间为10分钟后
$token_exptime = time()+10*60;
$dt = array(
'id' => $id,
'token' => $token,
'token_exptime' => $token_exptime,
);
$link = $Reader -> save($dt);
if($link){
$url = U('active');//用于激活的地址
$end = strrpos($url,'.');
$url = substr($url,0,$end);
$emailsubject = "XXXXX";//邮箱标题
//邮箱内容
$emailbody = "尊敬的".$username.":
<br/>请点击链接修改您的帐号密码。
<br/>
<a href='".__APPURL__."/$url?verify=".$token."' target='_blank'>".__APPURL__."/$url?verify=".$token."</a>
<br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接10分钟内有效。<br/>
如果此次激活请求非你本人所发,请忽略本邮件。
<br/>
<p style='text-align:right'>-------- 敬上</p>";
$rs = send_email($email,$emailsubject,$emailbody);
//send_email(邮箱,邮箱标题,邮箱内容);
if($rs){
$msg = '恭喜您,提交成功!请登录到您的邮箱修改您的密码!';
}else{
$msg = '提交失败!';
}
$this->redirect('Index/index',array(),0.00001,"<script>alert('$msg');</script>");
exit;
}
}else{
$this->display();
}
}
//修改地址
public function active(){
$Reader = D('reader');
if(!empty($_POST)){
$Reader->create();
$rst = $Reader->save();
if($rst){
// 记录你认为必要的session
$this->redirect('Index/index','',0.001,'<script>alert("修改成功");</script>');
exit;
}else{
$this->redirect('Index/index','',0.001,'<script>alert("修改失败");</script>');
exit;
}
// 根据token查找
// if OK 并且链接未过时 则提供修改页面 并且修改到token对应上
}else{
$verify = stripslashes(trim($_GET['verify']));
$time = time();
$where['token'] = $verify;
$reader = $Reader -> where($where)->find();
if($reader['token_exptime'] < $time){
// 超时
$this->redirect('Index/index','',0.001,'<script>alert("该链接已经失效");</script>');
exit;
}
$this->assign('id',$reader['id']);
$this->display();
}
}
/**
* send email by swiftmailer
*
* @param string|array $to 收件人
* @param string $subject 主题
* @param string $content 内容
* @return int 发送的邮件数目
*/
function send_email($to, $subject, $content)
{
vendor('swiftmailer.swift_required');
// $transport = Swift_SmtpTransport::newInstance(C('SWIFT_HOST'), 25)
$transport = Swift_SmtpTransport::newInstance(C('SWIFT_HOST'), 465, 'ssl')
->setUsername(C('SWIFT_USERNAME'))
->setPassword(C('SWIFT_PASSWORD'));
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom(array(C('SWIFT_USERNAME') => '某某某'))
->setTo($to)
->setBody($content, 'text/html', 'utf-8');
return $mailer->send($message);
}