• 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 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方法的返回值了。

  • 相关阅读:
    TweenMax_API介绍
    正则表达式基础讲解
    CSS3 calc()的使用
    WebGL框架 -- three.js
    CSS3 box-sizing属性
    prefixfree.js_无前缀脚本
    css样式—字体垂直、水平居中
    JQuery解析json数据
    移动Web开发规范
    Ajax与json在前后端中的细节解惑
  • 原文地址:https://www.cnblogs.com/jeemly/p/3759772.html
Copyright © 2020-2023  润新知