前言

最近没发文章也是忙着写一个系统,完工的时候想给加一个邮件通知功能,ThinkPHP本身没有支持发送邮件功能,我们可以自己封装一个就行了,下面给我的实现方法分享一下。

实现

首先ThinkPHP是支持Composer的,我们直接安装PHPMailer即可

composer require phpmailer/phpmailer

接着在应用公共文件添加发送邮件的函数,说一下web_config这个是读取的全局中间价的网站配置,我懒得改了,大家自行修改一下就行。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

/**
 * 系统邮件发送函数
 * @param string $to 接收邮件者邮箱
 * @param string $subject 邮件主题
 * @param string $body 邮件内容
 * @param bool $form_name 发件人昵称
 * @param string $attachment 附件列表
 * @return boolean
 */
function send_mail($to, $subject = '', $body = '', $form_name = false, $attachment = [])
{
    $mail = new PHPMailer(true);
    $mail_config = Request::param('web_config');
    //服务器配置
    $mail->CharSet = "UTF-8";
    $mail->SMTPDebug = 0;
    $mail->isSMTP();
    $mail->Host = $mail_config['mail_stmp'];
    $mail->SMTPAuth = true;
    if ($mail_config['mail_ssl']) {
        $mail->SMTPSecure = 'ssl';
    } else {
        $mail->SMTPAutoTLS = false;
        $mail->SMTPSecure = false;
    }
    $mail->Username = $mail_config['mail_name'];
    $mail->Password = $mail_config['mail_pwd'];
    $mail->Port = $mail_config['mail_port'];
    $mail->setFrom($mail_config['mail_name'], $form_name ? $form_name : $mail_config['mail_form']);
    $mail->addAddress($to, 'Joe');
    $mail->addReplyTo($mail_config['mail_name'], $form_name ? $form_name : $mail_config['mail_form']);
    $mail->isHTML(true);
    $mail->Subject = $subject;
    $mail->Body = $body;
    if (is_array($attachment)) {
        foreach ($attachment as $file) {
            is_file($file) && $mail->AddAttachment($file);
        }
    }
    return $mail->Send() ? true : $mail->ErrorInfo;
}

使用

send_mail('599928887@qq.com', '标题', '内容', '教书先生');

参数为

收件人邮箱地址,邮件标题,邮件内容,发件人昵称(此处可不填写,但是要保证函数里面配置的有默认的发件人昵称)

最后

有问题可在下方评论,一起探讨。

最后修改:2021 年 04 月 01 日
如果觉得我的文章对你有用,请随意赞赏