ThinkPHP中邮件发送功能

初次使用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 Account\Controller;
use Think\Controller;
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方法的返回值了。

posted on 2014-05-29 18:04  jeemly  阅读(437)  评论(0编辑  收藏  举报