首先这是一个封装的phpmailer控制器方法,可以直接用
也是其次,这是一个实现了基本发送邮件的代码,
功能包括,发送方,收件方,抄送方,包括邮件附件,暂不支持回复功能,其实只要按照格式加上回复那一部分代码就可以了~
直接上代码:
MailController.php
<?php namespace mason; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\PHPMailer; class MailController { /** * * phpmailer邮件对象 * @var PHPMailer */ public $mail; /** * 基础配置 * @var array|mixed */ public $config; /** * 要发送的数据集合 * @var array|mixed */ public $data; /** * @var string * 默认字符类型 */ public $CharSet = 'utf8'; /** * @var int * 默认是否调试 */ public $SMTPDebug = 0; /** * @var string * 发送方的SMTP服务器地址 */ public $host = "smtp.exmail.qq.com"; /** * @var string * 使用协议方式 */ public $SMTPSecure = "ssl"; /** * @var int * 协议端口 */ public $port = 465; /** * @param array $config * @param array $data * @param PHPMailer $PHPMailer * 构造方法 */ public function __construct($config = array(), $data = array()) { $this->mail = new PHPMailer(true); $this->config = $config; $this->data = $data; $this->baseConfig(); } /** * @return $this * 基础配置 */ public function baseConfig() { $this->mail->SMTPDebug = isset($this->config['debug'])? $this->config['debug']: $this->SMTPDebug; if(isset($this->config['debug_output']) && $this->config['debug_output'] === true){ $this->mail->Debugoutput = function ($str, $level){ echo "$str"; }; } $this->mail->isSMTP(); $this->mail->isHTML(false); $this->mail->CharSet = isset($this->config['CharSet'])? $this->config['CharSet']: $this->CharSet; $this->mail->Host = isset($this->config['host'])? $this->config['host']: $this->host;// 发送方的SMTP服务器地址 $this->mail->SMTPSecure = isset($this->config['SMTPSecure'])? $this->config['SMTPSecure']: $this->SMTPSecure;// 使用ssl协议方式 $this->mail->Port = isset($this->config['port'])? $this->config['port']: $this->port;// 163邮箱的ssl协议方式端口号是465/994 (isset($this->config['SMTPAuth']) && $this->config['SMTPAuth'] === true) && $this->mail->SMTPAuth = true; return $this; } public function senderInfo() { $this->mail->Username = $this->data['username']; // 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱 $this->mail->Password = $this->data['password']; // 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码! return $this; } public function sendData() { $this->mail->setFrom($this->data['setFrom']); // 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示 $this->mail->Subject = $this->data['Subject']; // 邮件标题 $this->mail->Body = $this->data['Body']; //邮件正文 return $this; } /** * @param $sendTo * 接收邮件方 */ public function receive($sendTo = '') { if(!empty($sendTo)){ if(is_array($sendTo)){ foreach ($sendTo as $v){ $this->mail->addAddress($v); } }else{ $this->mail->addAddress($sendTo); } } return $this; } /** * @param $copyFor * 抄送邮件方 */ public function copyFor($copyFor = '') { if(!empty($copyFor)){ if(is_array($copyFor)){ foreach ($copyFor as $v){ $this->mail->addCC($v); } }else{ $this->mail->addCC($copyFor); } } return $this; } /** * 添加附件 * @param string $file * @throws \PHPMailer\PHPMailer\Exception */ public function attachment($file = '') { if(!empty($file)){ if(is_array($file)){ foreach ($file as $v){ $this->mail->addAttachment($v); } }else{ $this->mail->addAttachment($file); } } return $this; } /** * 邮件发送 */ public function send() { try { $this->senderInfo(); $this->sendData(); $this->receive($this->data['sendTo']); $this->copyFor($this->data['copyTo']); $this->attachment($this->data['file']); // 发送邮件 if (!$this->mail->send()) { echo json_encode([ 'code' => 400, 'msg' => '发送失败:'.$this->mail->ErrorInfo, 'data' => [], 'other'=>[] ]); exit; } // else { // echo json_encode([ // 'code' => 200, // 'msg' => '发送成功', // 'data' => [], // 'other'=>[] // ]); // } } catch (Exception $e){ echo json_encode(['code' => 409, 'msg' => '发送异常:'.$this->mail->ErrorInfo, 'data' => [], 'other'=>[]]); exit; } } }
调用方式:
$config = [ //'debug_output' => true, //调试专用 'SMTPAuth' => true, ]; $data = [ 'username' => $param['sendEmail'], //用户邮件地址 'password' => $param['emailPassword'], //用户配置的密码 //'password' => 546345643, //测试异常接收功能,实际运行可删除此行代码 'sendTo'=>$sendTo, //发送方 'copyTo'=>$copyTo, //抄送方 'file'=>array_merge($uploadArr, [public_path('static').$file_path]), //附件,都是地址,最好是本地地址 'setFrom' => $param['sendEmail'], //谁发送的,用来显示在邮件列表的名称 'Subject' => '邮件标题', //邮件标题 'Body' => $user['nick_name'] . "的".date('Y-m-d')."日报已提交, 本邮件由系统自动发送" //邮件内容,这里只是一段话,具体的格式支持请查看文档自行修改 ]; $mail = new MailController($config, $data); $mail->send(); 以上~