本文作者:心月

ThinkPHP5整合PHPMailer实现QQ邮件发送

心月IT博客 2019-10-21
ThinkPHP5整合PHPMailer实现QQ邮件发送摘要:邮件发送功能在项目中还是非常常用的,比如用户注册发送验证码,用户发送留言邮件,事件提醒功能等。今天我们就用thinkphp5整合PHPMailer来实现邮件发送功能。

        邮件发送功能在项目中还是非常常用的,比如用户注册发送验证码,用户发送留言邮件,事件提醒功能等。今天我们就用thinkphp5整合PHPMailer扩展来实现邮件发送功能。


1、QQ邮箱设置

        想要在第三方登录QQ邮箱发送邮件,首先得开启QQ邮箱的SMTP服务,并设置第三方登录授权码

开启QQ邮箱SMTP服务,设置授权码


2、下载PHPMail扩展

扩展下载地址:https://github.com/PHPMailer/PHPMailer

        在下载的文件的解压缩包中只有这几个文件是我们需要的:Exception.php,PHPMailer.php,POP3.php,SMTP.php

extend\PHPMailer\src :

PHPMail主文件


3、将PHPMail扩展放到我们的Thinkphp5项目中

        在 extend 下新建一个文件夹 PHPMailer,将第二步提到的4个php文件放到 PHPMailer 文件夹内,并将这4个php文件的命名空间都改成

namespace PHPMailer;


4、开始代码实现发送邮件

        PHPMail扩展放入项目后就可以开始写代码实现邮件发送功能了:

use PHPMailer\PHPMailer; //引入PHPmailer扩展类
/**
 * @param $toEMail 接收人的邮箱号
 * @param $toName  接收人名字
 * @param $content 邮件内容
 * @throws \PHPMailer\Exception
 */
public function sendMail($toEMail=null,$toName=null, $content=null)
{

    $phpMaid = new PHPMailer();
    $sendmail = EMAIL_ADMIN; //发件人邮箱,可以通过常量配置,或者通过配置文件配置
    $sendmailpswd = EMAIL_PASSWORD; //客户端授权密码,第一步QQ邮箱开启SMTP服务时设置的授权码
    $send_name = '心月IT博客';// 设置发件人信息,如邮件格式说明中的发件人,

    $phpMaid->isSMTP();// 使用SMTP服务
    $phpMaid->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
    $phpMaid->Host = "SMTP.qq.com";// 发送方的SMTP服务器地址
    $phpMaid->SMTPAuth = true;// 是否使用身份验证
    $phpMaid->Username = $sendmail;//// 发送方的
    $phpMaid->Password = $sendmailpswd;//客户端授权密码,而不是邮箱的登录密码!
    $phpMaid->SMTPSecure = "ssl";// 使用ssl协议方式
    $phpMaid->Port = 465;//  sina端口110或25) //qq  465 587
    $phpMaid->setFrom($sendmail, $send_name);// 设置发件人信息,如邮件格式说明中的发件人,
    $phpMaid->addAddress($toemail, $to_name);// 设置收件人信息,如邮件格式说明中的收件人,
    $phpMaid->addReplyTo($sendmail, $send_name);// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
    $phpMaid->Subject = "这是邮件的标题!";// 邮件标题
    $phpMaid->Body = $content; // 邮件正文
    //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
    if(!$phpMaid->send()){

        echo "邮件发送失败,发送失败原因:".$phpMaid->ErrorInfo.date('Y-m-d H:i:s',time());


    }else{
        echo "邮件发送成功:".date('Y-m-d H:i:s',time());
    }

}

接下来通过执行 sendMail 函数验证能否成功发送邮件:

(注意下函数的3个参数,可以先在函数中定死这3个参数的值,等测试成功后再换成参数)

发送QQ邮件

QQ邮箱成功接收到邮件,说明代码没问题。

【开发中的坑】

如果遇到 Extension missing: openssl 问题,这是因为php的openssl扩展没开启,在php.ini配置文件中开启 它,然后重启服务器。

如果遇到 SMTP connect() failed ,账号登录失败的原因,检查下发件人的邮箱账号和授权码是否设置正确。


        PHPMail发送邮件的流程大致就是这样的,在实际项目中可能会有多处需要发送邮件,因此我们可以把它封装成一个在整个项目流程中都能调用到的方法,然后把可能变动的信息设置成参数,在需要发送邮件的地方,只需调用这个发送邮件的方法并传入相关参数即可。


文章版权及转载声明:

本文由:IT技术博客 心月整理分享于 2019-11-18 20:16:11
若转载请注明原文及出处:http://www.xinyueseo.com/other/427.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论