前言

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 = null)
{
    $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('1090370813@qq.com', '标题', '内容', '白鸽大人');

参数为

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

最后

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

ThinkPHP实现邮件发送功能

https://blog.sdgou.cc/archives/79.html

作者

白鸽

发布时间

2021-02-08

许可协议

CC BY-SA 4.0