💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
``` composer require phpmailer/phpmailer ``` 使用: ``` $config = [ 'userName' => '***@qq.com', 'password' => '***', 'host' => 'smtp.qq.com', 'port' => 465, 'receiveEmail' => '***@qq.com,***@qq.com', 'receiveNickname' => 'a,2', 'subject' => 'wo是主题', 'body' => $this->createHtml(), //html内容 'attachment' => 'runtime/uploads/files/2020-04-07/20200316.pdf,runtime/uploads/files/2020-04-07/20200316.docx', 'attachmentName' => 'pdf' ]; $email = new PHPMailerLib($config); return json($email->sendEmail()); ``` 整理的类 ``` <?php /** * +---------------------------------------------------------------------- * | ThinkPHP [ WE CAN DO IT JUST THINK ] * +---------------------------------------------------------------------- * | Copyright (c) 2020 ahai574 All rights reserved. * +---------------------------------------------------------------------- * | Licensed ( ++++ahai574++++ ) * +---------------------------------------------------------------------- * | Author: 阿海 <764882431@qq.com> * +---------------------------------------------------------------------- */ namespace app\common\library; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; class PHPMailerLib { /** * 开启调试 0 不开启 2开启 */ private $SMTPDebug = 0; /** * 发送服务端 smtp.qq.com smtp.163.com */ private $host = 'smtp.qq.com'; /** * 是否需要开启认证授权 */ private $SMTPAuth = true; /** * 发送的邮箱地址 */ private $userName = ''; /** * 邮箱授权密码 */ private $password = ''; /** * 发送人的昵称 */ private $sendNickname = ''; /** * 使用的协议 */ private $SMTPSecure = 'ssl'; /** * 发送的端口如:25 阿里云服务器是禁用这个端口的,所以建议是使用465端口来发送 */ private $port = 465; /** * 接收者的邮箱,使用英文逗号“,”分割 */ private $receiveEmail = ''; /** * 接收者的昵称,使用英文逗号“,”分割 */ private $receiveNickname = ''; /** * 附件路径 ,使用英文逗号“,”分割 */ private $attachment = null; /** * 附件文件对应的名称 使用英文逗号“,”分割 */ private $attachmentName = ''; /** * 回复人的邮箱,使用英文逗号“,”分割 */ private $replyEmail = null; /** * 回复人的名称,使用英文逗号“,”分割 */ private $replyNickname = ''; /** * 邮件的主题 标题 */ private $subject = ''; /** * 邮件的主体 html内容 */ private $body = ''; public function __construct($config = null) { if (is_null($config) || !is_array($config)) { throw new Exception("配置必须是数组,参数不能为空,请查看setMailerConf的参数"); } //批量设置参数 $this->setMailerConf($config); } /** * 批量设置 * 设置发送服务端的配置 * @param $array 数组 ['userName'=>'','password'=>'','sendNickname'=>'','host'=>'smtp.163.com','port'=>465,...] */ public function setMailerConf($array) { if (is_array($array)) { $this->SMTPDebug = isset($array['SMTPDebug']) ? $array['SMTPDebug'] : $this->SMTPDebug; $this->userName = isset($array['userName']) ? $array['userName'] : $this->userName; $this->password = isset($array['password']) ? $array['password'] : $this->password; $this->sendNickname = isset($array['sendNickname']) ? $this->setMailerCharset($array['sendNickname']) : $this->sendNickname; $this->host = isset($array['host']) ? $array['host'] : $this->host; $this->port = isset($array['port']) ? $array['port'] : $this->port; $this->receiveEmail = isset($array['receiveEmail']) ? $array['receiveEmail'] : $this->receiveEmail; $this->receiveNickname = isset($array['receiveNickname']) ? $this->setMailerCharset($array['receiveNickname']) : $this->receiveNickname; $this->replyEmail = isset($array['replyEmail']) ? $array['replyEmail'] : $this->replyEmail; $this->replyNickname = isset($array['replyNickname']) ? $this->setMailerCharset($array['replyNickname']) : $this->replyNickname; $this->attachment = isset($array['attachment']) ? $array['attachment'] : $this->attachment; $this->attachmentName = isset($array['attachmentName']) ? $this->setMailerCharset($array['attachmentName']) : $this->attachmentName; $this->subject = isset($array['subject']) ? $this->setMailerCharset($array['subject']) : $this->subject; $this->body = isset($array['body']) ? $array['body'] : $this->body; } return $this; } /** * 中文--转码 */ private function setMailerCharset($value) { return "=?utf-8?B?" . base64_encode($value) . "?="; } /** * 开启调试 0 不开 2 开 */ public function setDebug($debug = 2) { $this->SMTPDebug = $debug; return $this; } /** * 设置附件 */ public function setAttachment($attachment = null, $attachmentName = null) { $this->attachment = $attachment; $this->attachmentName = $attachmentName; return $this; } /** * 设置内容主体 */ public function setBody($html) { $this->body = $html; return $this; } /** * 设置标题 */ public function setSubject($title) { $this->subject = $title; return $this; } /** * 设置收件人 及昵称 */ public function setReceiveEmail($email, $nickName = null) { $this->receiveEmail = $email; $this->receiveNickname = $nickName; return $this; } /** * 设置回复人邮箱 昵称 */ public function setReplyEmail($email, $nickName = null) { $this->replyEmail = $email; $this->replyNickname = $nickName; return $this; } /** * 发送邮件 */ public function sendEmail() { date_default_timezone_set("Asia/Shanghai"); $mail = new PHPMailer(true); try { //服务端 $mail->CharSet = 'utf-8'; //$mail->Encoding = "base64"; $mail->setLanguage('zh_cn', env('root_path') . "\\vendor\\phpMailer\\phpmailer\\language\\"); $mail->SMTPDebug = $this->SMTPDebug; $mail->isSMTP(); $mail->Host = $this->host; $mail->SMTPAuth = $this->SMTPAuth; $mail->Username = $this->userName; $mail->Password = $this->password; $mail->SMTPSecure = $this->SMTPSecure; $mail->Port = $this->port; //发送端 只能一个 $mail->setFrom($this->userName, $this->sendNickname); //接收端 if (is_null($this->receiveEmail) || empty($this->receiveEmail)) { throw new Exception("必须设置接收者的邮箱"); } $receiveEmails = explode(",", $this->receiveEmail); $receiveNicknames = explode(",", $this->receiveNickname); foreach ($receiveEmails as $key => $val) { $mail->addAddress($val, isset($receiveNicknames[$key]) ? $receiveNicknames[$key] : $val); //如果没有昵称则使用发送者的邮箱作为昵称 } if (!is_null($this->replyEmail) || !empty($this->replyEmail)) { $replyEmails = explode(",", $this->replyEmail); $replyNicknames = explode(",", $this->replyNickname); foreach ($replyEmails as $key => $val) { $mail->addAddress($val, isset($replyNicknames[$key]) ? $replyNicknames[$key] : $val); //如果没有昵称则使用回复者的邮箱作为昵称 } } // 添加附件 if (!is_null($this->attachment)) { $attachments = explode(",", $this->attachment); $attachmentsNames = explode(",", $this->attachmentName); foreach ($attachments as $key => $val) { $ext = substr($val, strrpos($val, '.')); $mail->addAttachment($val, isset($attachmentsNames[$key]) ? $attachmentsNames[$key] . $ext : "附件-" . ($key + 1) . $ext); } } $mail->isHTML(true); // Set email format to HTML $mail->Subject = $this->subject; $mail->Body = $this->body; if (!$mail->send()) { return ['result' => false, 'errorMsg' => $mail->ErrorInfo]; } else { return ['result' => true, 'msg' => '邮件发送成功']; } } catch (Exception $e) { return ['result' => false, 'errorMsg' => $mail->ErrorInfo]; } } } ```