前段时间由于部署https://gitee.com/zeroart/api_spms_open项目测试发现无法发送用户注册验证码,排查后决定修改PHPMailer相关部分
背景知识
- 邮件的使用场景一般有很多,例如用户注册,消息通知等等,本案例以用户注册发送验证码为场景
- PHPMailer是一个PHP相关的邮件类,使用它可以很轻松的发送邮件
Ps:最新版PHPMailer需要使用composer
安装
环境
宝塔8.0.2+php7.4+Nginx1.24
宝塔面板安装不再赘述,新建站点,配置好后使用composer安装PHPMailer获取文件
PHPMailer的github主页:PHPMailer下载 。例如在站点下创建一个测试目录phpmail,输入如下命令安装:
composer require phpmailer/phpmailer
如图:
由于发送邮件需要服务器,这里建议使用第三方,我这边使用的是QQ邮箱。首先登陆QQ邮箱,选择顶部设置按钮进入设置的子栏目POP3/SMTP/IMAP,具体操作百度一下
然后选择相应的服务并保存:
之后选择管理服务进行客户端授权密码生成,设置授权密码,需要手机短信验证:
以上步骤设置好之后,就可以进入编码工作了。
第一步用composer安装好PHPMailer之后,在phpmail目录中会有verdor目录以及composer.json,composer.lock两个文件,vendor目录中存放的是PHPMailer的核心代码与composer相关,至于其他两个文件也是与composer相关的,这里不做阐述了。
拷贝verdor目录到项目app/Plugin/smtp/下,修改目录下functions.php文件,写上如下代码:
<?php
//require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
if (!function_exists('sendMail')) {
/*发送邮件方法
*@param $to:接收者 $title:标题 $content:邮件内容
*@return bool true:发送成功 false:发送失败
*/
function sendMail($to, $title, $content)
{
//$mailpz = require_once APP_CONFIG . "email.php";
$mail=new PHPMailer();
// try{
//邮件调试模式
//$mail->SMTPDebug = 1;
//设置邮件使用SMTP
$mail->isSMTP();
// 设置邮件程序以使用SMTP
$mail->Host = 'smtp.qq.com';
// 设置邮件内容的编码
$mail->CharSet='UTF-8';
// 启用SMTP验证
$mail->SMTPAuth = true;
// SMTP username
$mail->Username = '你的邮箱';
// SMTP password
$mail->Password = '客户端授权码';
// 启用TLS加密,`ssl`也被接受
$mail->SMTPSecure = 'ssl';
// 连接的TCP端口
$mail->Port = 465;
// 设置发件人
$mail->setFrom('你的邮箱');
// 添加收件人1
$str = explode(',', $to);
foreach ($str as $strs) {
$mail->addAddress($strs);
}
//$mail->addAddress($to); // Add a recipient
// $mail->addAddress('ellen@example.com'); // Name is optional
// 收件人回复的邮箱
$mail->addReplyTo('你的邮箱');
// 抄送
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
// 附件
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//Content
// 将电子邮件格式设置为HTML
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = '你本次注册的'.$content.',请在十分钟之内使用它!';
//$mail->AltBody = '这是非HTML邮件客户端的纯文本';
// $mail->send();
// echo 'Message has been sent';
$mail->isSMTP();
// }catch (Exception $e){
// echo 'Mailer Error: ' . $mail->ErrorInfo;
// }
if ($mail->send()) {
return true;
} else {
return false;
}
}
}
即可完成邮件的发送。
本站所有文章,如无特殊说明或标注,均为本站原创发布。
任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
瞬光斩黯黮,昭明破晦夜。
我也想杀死伤痛,让那恩怨有始有终。