ThinkPHP 使用第三方phpmailer库发送邮件

安装phpmailer库

由于phpmailer托管在composer上,所以可使用composer进行安装。进入thinkphp工程根目录下,输入如下命令。

composer require phpmailer/phpmailer

等待片刻后,自动默认安装在vendor目录下。如图。

编写公共的发邮件方法(可选)

在application目录下的common.php文件中编写发邮件方法。在公共common.php文件中编写方法有个好处就是,可以在整个thinkphp框架下直接调用该方法名。

use PHPMailer\PHPMailer\PHPMailer;

/**
 * 发送邮件
 * @param array $content
 * @return string
 */
function sendEmail(array $content=[
       'Host'=>'',                 //服务器
       'Port'=>'',                 //端口
       'Username'=>'',             //邮箱的用户名
       'Password'=>'',             //密码  部分邮箱是授权码(例如163邮箱)
       'setFrom'=>[],              //发件人
       'addAddress'=>[],           //收件人
       'addReplyTo'=>[],           //回复的时候回复给哪个邮箱 建议和发件人一致
       'addCC'=>[],                //抄送
       'addBCC'=>[],               //密送
       'addAttachment'=>'',        //添加附件
       'Subject'=>'',              //邮件标题
       'Body'=>'',                 //邮件内容
       'AltBody'=>'',              //如果邮件客户端不支持HTML则显示此内容
   ])
{
    $email = new PHPMailer(true);
    try {
        $email->isSMTP();               //使用SMTP协议
        $email->isHTML(true);           //是否以HTML文档格式发送
        $email->SMTPAuth = true;        //启用SMTP验证功能
        $email->SMTPSecure = "ssl";     //加密方式
        $email->CharSet ="UTF-8";       //设定邮件编码
        // $email->SMTPDebug = false;      //设置为 true 可以查看具体的发送日志

        //获取参数
        $email->Host = $content['Host'];
        $email->Port = $content['Port'];
        $email->Username = $content['Username'];
        $email->Password = $content['Password'];
        $email->setFrom($content['setFrom'][0],$content['setFrom'][1]);
        $email->addAddress($content['addAddress'][0],$content['addAddress'][1]);
        if(!empty($content['addReplyTo'])){ $email->addReplyTo($content['addReplyTo'][0],$content['addReplyTo'][1]); }
        if(!empty($content['addCC'])){ $email->addCC($content['addCC'][0],$content['addCC'][1]); }
        if(!empty($content['addBCC'])){ $email->addBCC($content['addBCC'][0],$content['addBCC'][1]); }
        if(!empty($content['addAttachment'])){ $email->addAttachment = $content['addAttachment']; }
        $email->Subject = $content['Subject'];
        $email->Body = $content['Body'];
        if(!empty($content['AltBody'])){ $email->AltBody = $content['AltBody']; }
        $res = $email->send();
        if ($res){
            return '1^邮件发送成功';
        }else{
            return '-1^邮件发送失败';
        }

    }catch (Exception $e){
        return '-1^邮件发送失败: '.$email->ErrorInfo;
    }

}

调用发邮件方法

编写好发邮件的方法后进行发邮件测试,如在index.php文件中编写测试方法。

/**
 * 测试方法
 */
function test(){
    // include '../application/common.php';
    echo sendEmail([
        'Host'=>'smtp.exmail.qq.com',                 //服务器
        'Port'=>'465',                 //端口
        'Username'=>'w******g@med****.cn',             //邮箱的用户名
        'Password'=>'D******4',             //密码  部分邮箱是授权码(例如163邮箱)
        'setFrom'=>['w******g@med****.cn','**旺'],              //发件人
        'addAddress'=>['w******w@foxmail.com','w***w'],           //收件人
        'addReplyTo'=>['w******g@med****.cn','**旺'],           //回复的时候回复给哪个邮箱 建议和发件人一致
        'addCC'=>[],                //抄送
        'addBCC'=>[],               //密送
        'addAttachment'=>'',        //添加附件
        'Subject'=>'这里是邮件标题',              //邮件标题
        'Body'=>'<h1>这里是邮件内容</h1>',                 //邮件内容
        'AltBody'=>'如果邮件客户端不支持HTML则显示此内容',              //如果邮件客户端不支持HTML则显示此内容
    ]);
}

在浏览器中输入测试方法的地址。效果如图。

   至此。转载请注明出处,记得扫码打赏支持哦,谢谢!

posted @ 2021-02-18 21:25  失恋的蔷薇  阅读(269)  评论(0编辑  收藏  举报