因项目需求发送验证码至用户邮箱,记录一下方便以后使用
以QQ邮箱为例:
一、开启SMTP服务(使用php发送邮件需要用到SMTP服务,这里以QQ邮箱的SMTP服务为例)
1.登录qq邮箱,在首页上找到“设置-》账户 下滑找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”。
2.选择开启的服务,开启IMAP/SMTP服务得到授权码。
3.服务开启成功后会有一个授权码,需要记录下来,后续会用到
4.设置完客户端授权密码后就成功开通了SMTP服务
二、根目录下composer 安装phpmailer压缩包
composer require phpmailer/phpmailer
执行完成后会在项目中的vendor目录下新建一个phpmailer文件夹
三、直接上代码
<?php
namespace app\controller;
use app\BaseController;
//引用mail
use PHPMailer\PHPMailer\PHPMailer;
class Index extends BaseController
{
public function index()
{
//接受输入的mail
$sumail = input("email", "");
//判断邮箱不能为空
if (empty($sumail)) {
return show(config("code.status.error"), "邮箱不能为空");
}
$toemail = $sumail;//定义收件人的邮箱
$mail = new PHPMailer();
$mail->isSMTP();// 使用SMTP服务
$mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
$mail->Host = "smtp.qq.com";// 发送方的SMTP服务器地址
$mail->SMTPAuth = true;// 是否使用身份验证
$mail->Username = "发送方的邮箱用户名";// 发送方的邮箱用户名,就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;">
$mail->Password = "刚记录下来的授权码";// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码!</span><span style="color:#333333;">
$mail->SMTPSecure = "ssl";// 使用ssl协议方式</span><span style="color:#333333;">
$mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994
$mail->setFrom("xxx", "xxx");// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示
$mail->addAddress($toemail, '小白商城');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com)
$mail->addReplyTo("xxxx", "xx");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
//$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
//$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
//$mail->addAttachment("bug0.jpg");// 添加附件
$mail->Subject = "测试邮件发送";// 邮件标题
$codecheck = "123456"; // 邮箱验证码封存,可以改为数组生成随机验证码
$mail->Body = "邮件内容是 <b>您的验证码是:$codecheck</b>,哈哈哈!";// 邮件正文
$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
if (!$mail->send()) {// 发送邮件
echo "验证码发送失败" . $mail->ErrorInfo;;
} else {
echo '发送成功';
}
}
}
注意 控制器需要引入PHPMailer
然后根据注释填上自己相关的信息
测试:
QQ邮箱: