邮件发送是项目中很常用的功能,可用作给用户发送邮箱验证码,也可用作用户工单提交,甚至可以在项目运行中发生异常时将异常信息或者作为计划任务将一段时间内的执行日志发送至运维/开发人员。这里将使用PHPmailer为例记录一下在TP5.1中从装包配参数到实现功能的过程。
一、首先要确定你的PHP环境是否开启了openssl,打开你的PHP安装目录的php.ini中搜索php_openssl.dll,若extension前有分号则去掉,若搜索不到这一项请手动添加。
二、在项目下使用composer安装PHPmailer包。
composer require phpmailer/phpmailer
安装完成后在vender中能找到phpmailer即代表下载安装成功。
三、写入公共配置项、写发送邮件公共函数。
首先打开config目录中的app.php在末尾添加一个配置项mail并写入部分配置,配置说明在注释中有涉及。
'email' => [
'SMTPDebug' => 0, // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
'SMTPAuth' => true, 启用 SMTP 验证功能
'SMTPSecure' => 'ssl', // 使用安全协议
'Host' => 'smtp.qq.com', // SMTP 服务器
'Port' => '465', // SMTP服务器的端口号
'Username' => 'XXXXXXXXXX@qq.com', // SMTP服务器用户名
'Password' => 'XXXXXXXXXX', // SMTP服务器密码
'from' => "XXXXXXXXXX@qq.com", //发件人邮箱
'fromname' => 'XX', //发件人昵称
],
这里以QQ邮箱为例,QQ邮箱的SMTP服务器及端口官方都有说明,这里需要注意的是SMTP服务器用户名默认是邮箱号,但是SMTP密码却不是邮箱密码,需要在邮箱中开启SMTP服务并获取授权码,这里填写的密码便是获得的授权码。我们登录QQ邮箱打开设置-账户找到这个设置项开启并获取授权码写入配置即可。发件人邮箱号需填写SMTP对应的邮箱号。
基础配置完成之后打开common.php写入我们的发送邮件公共函数
/**
* 系统邮件发送函数
* @param string $receiveMail 接收邮件的邮箱
* @param string $name 接收邮件者名称
* @param string $subject 邮件标题
* @param string $body 邮件内容
* @param string $attachment 附件列表
* @return boolean
* @throws \PHPMailer\PHPMailer\Exception
*/
function sendMail($receiveMail, $name, $subject = '', $body = '', $attachment = null) {
$mail = new PHPMailer\PHPMailer\PHPMailer(); // 实例化PHPMailer对象
$mail->CharSet = 'UTF-8'; // 设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPDebug = config('email')['SMTPDebug']; // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
$mail->SMTPAuth = config('email')['SMTPAuth']; // 启用 SMTP 验证功能
$mail->SMTPSecure = config('email')['SMTPSecure']; // 使用安全协议
$mail->Host = config('email')['Host']; // SMTP 服务器
$mail->Port = config('email')['Port']; // SMTP服务器的端口号
$mail->Username = config('email')