PHP使用PHPMailer发送邮件

前段时间由于部署https://gitee.com/zeroart/api_spms_open项目测试发现无法发送用户注册验证码,排查后决定修改PHPMailer相关部分

背景知识

  • 邮件的使用场景一般有很多,例如用户注册,消息通知等等,本案例以用户注册发送验证码为场景
  • PHPMailer是一个PHP相关的邮件类,使用它可以很轻松的发送邮件

Ps:最新版PHPMailer需要使用composer安装

环境

宝塔8.0.2+php7.4+Nginx1.24

宝塔面板安装不再赘述,新建站点,配置好后使用composer安装PHPMailer获取文件

PHPMailer的github主页:PHPMailer下载 。例如在站点下创建一个测试目录phpmail,输入如下命令安装:

composer require phpmailer/phpmailer

如图:

PHP使用PHPMailer发送邮件

由于发送邮件需要服务器,这里建议使用第三方,我这边使用的是QQ邮箱。首先登陆QQ邮箱,选择顶部设置按钮进入设置的子栏目POP3/SMTP/IMAP,具体操作百度一下

PHP使用PHPMailer发送邮件

然后选择相应的服务并保存:

PHP使用PHPMailer发送邮件

之后选择管理服务进行客户端授权密码生成,设置授权密码,需要手机短信验证:

PHP使用PHPMailer发送邮件

以上步骤设置好之后,就可以进入编码工作了。

第一步用composer安装好PHPMailer之后,在phpmail目录中会有verdor目录以及composer.json,composer.lock两个文件,vendor目录中存放的是PHPMailer的核心代码与composer相关,至于其他两个文件也是与composer相关的,这里不做阐述了。

拷贝verdor目录到项目app/Plugin/smtp/下,修改目录下functions.php文件,写上如下代码:

<?php 
//require 'vendor/autoload.php'; 
use PHPMailer\PHPMailer\PHPMailer;
if (!function_exists('sendMail')) {

    /*发送邮件方法
 *@param $to:接收者 $title:标题 $content:邮件内容
 *@return bool true:发送成功 false:发送失败
 */
    function sendMail($to, $title, $content)
    {
        //$mailpz = require_once APP_CONFIG . "email.php";
        
        $mail=new PHPMailer();
        
        // try{
            //邮件调试模式
            //$mail->SMTPDebug = 1;  
            //设置邮件使用SMTP
            $mail->isSMTP();
            // 设置邮件程序以使用SMTP
            $mail->Host = 'smtp.qq.com';
            // 设置邮件内容的编码
            $mail->CharSet='UTF-8';
            // 启用SMTP验证
            $mail->SMTPAuth = true;
            // SMTP username
            $mail->Username = '你的邮箱';
            // SMTP password
            $mail->Password = '客户端授权码';
            // 启用TLS加密,`ssl`也被接受
            $mail->SMTPSecure = 'ssl';
            // 连接的TCP端口
            $mail->Port = 465;
            // 设置发件人
            $mail->setFrom('你的邮箱');
            // 添加收件人1
            $str = explode(',', $to);
            foreach ($str as $strs) {
                $mail->addAddress($strs);
            }
            //$mail->addAddress($to);     // Add a recipient
            //            $mail->addAddress('ellen@example.com');               // Name is optional
            // 收件人回复的邮箱
            $mail->addReplyTo('你的邮箱');
            // 抄送
            //$mail->addCC('cc@example.com');
            //$mail->addBCC('bcc@example.com');
            // 附件
            //$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
            //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
            //Content
            // 将电子邮件格式设置为HTML
            $mail->isHTML(true);
            $mail->Subject = $title;
            $mail->Body    = '你本次注册的'.$content.',请在十分钟之内使用它!';
            //$mail->AltBody = '这是非HTML邮件客户端的纯文本';
            // $mail->send();
            // echo 'Message has been sent';
            $mail->isSMTP();
        // }catch (Exception $e){
        //     echo 'Mailer Error: ' . $mail->ErrorInfo;
        // }
        
            if ($mail->send()) {
                return true;
            } else {
                return false;
            }
    }
}

即可完成邮件的发送。

© 版权声明

给TA赞助
共{{data.count}}人
人已赞助
Wordpress教程&源码网站公告资讯

欢迎接入权戈互联

2023-6-26 18:23:49

WP教程

用《一言》替换B2 Pro主题的评论顶部提示

2022-2-24 15:12:45

3 条回复 A文章作者 M管理员
  1. 权戈

    瞬光斩黯黮,昭明破晦夜。

  2. 权戈

    我也想杀死伤痛,让那恩怨有始有终。

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
文章目录