初次使用thinkphp框架,开发一个邮件发送功能,由于对框架不熟悉折腾了几个小时终于成功了,以下是代码记录。
此函数只能在ThinkPHP中使用且需要phpmailer扩展的支持;
phpmail的下载地址:
https://code.google.com/a/apache-extras.org/p/phpmailer
将phpmailer解压后放置扩展放置到第三方类库扩展目录下: ThinkPHP/Extend/Vendor/文件夹下即可,并使用vendor方法来导入。更详细介绍参考:http://document.thinkphp.cn/manual_3_2.html#lib_extend
步骤1:创建think_send_mail方法
/** * 系统邮件发送函数 * @param string $to 接收邮件者邮箱 * @param string $name 接收邮件者名称 * @param string $subject 邮件主题 * @param string $body 邮件内容 * @return boolean */ function think_send_mail($to, $name, $subject = '', $body = ''){ vendor('PHPMailer.class#phpmailer'); //从PHPMailer目录导class.phpmailer.php类文件 $mail = new PHPMailer;//此处必须加“”号否则报错 // Inform class to use SMTP $mail->IsSMTP(); // Enable this for Testing $mail->SMTPDebug = 2; // Enable SMTP Authentication $mail->SMTPAuth = true; // Host of the SMTP Server $mail->Host = 'smtp.126.com';//SMTP服务器用户名 // Port of the SMTP Server $mail->Port = 25;//SMTP服务器端口 // SMTP User Name $mail->Username = "my_email_test@126.com";//邮箱地址 // SMTP User Password $mail->Password = "********";//邮箱密码 // Set From Email Address $mail->SetFrom("my_email_test@126.com", $name); // Add Subject $mail->Subject= $subject; // Add the body for mail $mail->MsgHTML($body); // Add To Address $mail->AddAddress($to, $name); // Finally Send the Mail return $mail->Send() ? true : $mail->ErrorInfo; }
步骤2:在控制器调用即可
namespace AccountController; use ThinkController; class AccountController extends Controller { //调用发送邮件功能 public function getPwd(){ $toEmail =$_POST['email']; $subJect='邮件主题'; $body='邮件内容'; $name='发件人名称'; $result=$this->think_send_mail($toEmail,'sever',$subJect,$body); if($result) echo "ok"; else echo "failed"; } }
步骤3:html页面调用控制器方法getPwd
function send() { if (check_email()) { var email = $("#email").val(); url = '__URL__/getPwd'; $.ajax({ type: 'POST', url: url, data: { email: email }, success: function (result) { if (result=="ok") alert('找回密码验证邮件已发送到'+email+'邮箱,请注意查收'); else if(result=="failed") alert('找回密码验证邮件发送失败,请重试'); else if(result=="no") alert(email+'邮箱未注册,请检查是否输入正确'); }, dataType: 'text' }); /* $.post(url, { email: email }, function (result) { alert(result); if (result=="ok") alert('找回密码验证邮件已发送到'+email+'邮箱,请注意查收'); else if(result=="failed") alert('找回密码验证邮件发送失败,请重试'); else if(result=="no") alert(email+'邮箱未注册,请检查是否输入正确'); });*/ } }
前台页面获取返回值时,浏览器的Response中出现了大量的phpmailer输出的内容,并不是仅仅有了getPwd方法的返回值。所以需要修改class.smtp.php文件中的edebug方法,将方法体全部注视。
这样就能只获得getPwd方法的返回值了。