THINKPHP发送邮件功能梳理
最近在做的项目有用到发送邮件的功能,之前用的是THINKPHP的完整包,直接写代码运行一切OK,这两天想着把框架熟悉一下,于是用了THINKPHP的核心包,结果game over,那么我就把过程梳理一下吧,给大家一点借鉴。
- 一、通过composer加载phpmailer插件包
- 二、配置config配置文件
- 三、编写邮件发送函数
- 四、邮件发送功能完成
一、通过composer加载phpmailer插件包
我在用THINKPHP核心包时就是因为忘记加载phpmailer插件包导致gameover
插件这一块有两种方式,一种是直接下载插件包,然后配置相关文件,一种是通过composer的方式加载插件包。我这里采取的是第二种方法,也就是通过composer的方式加载插件包。
composer require phpmailer/phpmailer
上面这个命令就是我们需要用到的了,在THINKPHP更目录下按住SHIFT+鼠标右键,选中 在此处打开命令窗口。然后在命令窗口中输入上述命令行,等待执行完成即可。
二、配置config配置文件
这里的配置文件是为了灵活切换邮件基本配置,包括发件人邮箱、名称等信息
我们在模块下的config.php文件中配置以下代码:
'THINK_EMAIL' => array(
'SMTP_HOST' => 'smtp.qq.com', //SMTP服务器
'SMTP_PORT' => '465', //SMTP服务器端口
'SMTP_USER' => '4966*****@qq.com', //SMTP服务器用户名
'SMTP_PASS' => 'abcds*****', //SMTP服务器密码
'FROM_EMAIL' => '4966*****@qq.com',
'FROM_NAME' => '', //发件人名称
'REPLY_EMAIL' => '', //回复EMAIL(留空则为发件人EMAIL)
'REPLY_NAME' => '', //回复名称(留空则为发件人名称)
)
三、编写邮件发送函数
之所以把发送邮件又称函数放到common.php中,是为了更好的重复使用
接下来我们再到模块下的common.php文件中编写咱们的发送邮件函数:
function send_mail($tomail, $name, $subject = '', $body = '', $attachment = null) {
$config = config('THINK_EMAIL');//读取配置文件,config助手函数是thinkphp5的写法,如果是thinkphp3请用C单字母函数
$mail = new \PHPMailer(); //实例化PHPMailer对象
$mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPDebug = 0; // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
$mail->SMTPSecure = 'ssl'; // 使用安全协议
$mail->Host = $config['SMTP_HOST']; // SMTP 服务器
$mail->Port = $config['SMTP_PORT']; // SMTP服务器的端口号
$mail->Username = $config['SMTP_USER']; // SMTP服务器用户名
$mail->Password = $config['SMTP_PASS']; // SMTP服务器密码
$mail->SetFrom($config['FROM_EMAIL'], $config['FROM_NAME']);
$replyEmail = $config['REPLY_EMAIL']?$config['REPLY_EMAIL']:$config['FROM_EMAIL']; //留空则为发件人EMAIL
$replyName = $config['REPLY_NAME']?$config['REPLY_NAME']:$config['FROM_NAME']; //回复名称(留空则为发件人名称)
$mail->AddReplyTo($replyEmail, $replyName);
$mail->Subject = $subject;
$mail->MsgHTML($body);
$mail->AddAddress($tomail, $name);
if (is_array($attachment)) { // 添加附件
foreach ($attachment as $file) {
is_file($file) && $mail->AddAttachment($file);
}
}
return $mail->Send() ? true : $mail->ErrorInfo;
}
四、邮件发送功能完成
走到这一步我们的功能已经完成99%了,接下来在需要使用的地方调用就好了
$toemail="发件人邮件地址";
$name="发件人名称";
$subject='密码找回';
$content="您好,您本次找回密码的验证码为<font color='red'>".$tmp."</font>";
send_mail($toemail,$name,$subject,$content);
好了,我们已经完成了邮件发送的所有功能了。让我们把重心放在系统的业务流程上吧!