tp6实现发送邮箱验证码
时间: 2024-01-18 07:08:51 浏览: 81
tp3.2邮箱发送验证码
好的,下面是一个使用 thinkphp6 发送邮件验证码的示例:
1. 首先,需要在 `config/mail.php` 文件中进行邮箱配置:
```php
return [
// 默认发送邮件设置
'default' => [
// 邮件服务器地址
'host' => 'smtp.163.com',
// 邮件服务器端口
'port' => 465,
// 发件人邮箱地址
'username' => 'your_email@example.com',
// 邮箱授权码,非邮箱登录密码
'password' => 'your_email_password',
// 邮箱加密方式,ssl 或 tls
'secure' => 'ssl',
// 默认发件人
'from' => [
'address' => 'your_email@example.com',
'name' => 'your_name',
],
],
];
```
2. 然后,创建一个 `MailService` 类,用于发送邮件:
```php
<?php
namespace app\service;
use think\facade\Cache;
use think\facade\Config;
use think\facade\View;
use think\facade\Lang;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
class MailService
{
/**
* 发送邮件验证码
*
* @param string $email 邮箱地址
* @param string $type 验证码类型,例如 register、forget
* @return boolean
*/
public function sendVerifyCode($email, $type)
{
// 生成验证码
$code = mt_rand(100000, 999999);
// 邮件主题和内容
$subject = Lang::get('mail.' . $type . '_subject');
$body = View::fetch('mail/' . $type . '_body', ['code' => $code]);
// 实例化 PHPMailer 对象
$mail = new PHPMailer(true);
try {
// 配置 SMTP 服务器
$mail->SMTPDebug = 0; // 调试:0 关闭,1 开启
$mail->isSMTP();
$mail->Host = Config::get('mail.default.host');
$mail->SMTPAuth = true;
$mail->Username = Config::get('mail.default.username');
$mail->Password = Config::get('mail.default.password');
$mail->SMTPSecure = Config::get('mail.default.secure');
$mail->Port = Config::get('mail.default.port');
// 设置发件人、收件人、邮件主题、内容
$mail->setFrom(Config::get('mail.default.from.address'), Config::get('mail.default.from.name'));
$mail->addAddress($email);
$mail->Subject = $subject;
$mail->Body = $body;
// 发送邮件
$mail->send();
// 将验证码存入缓存,有效期为 5 分钟
Cache::set('verify_code:' . $email, $code, 300);
return true;
} catch (Exception $e) {
return false;
}
}
}
```
3. 最后,在控制器中调用 `MailService` 类的 `sendVerifyCode` 方法即可:
```php
<?php
namespace app\controller;
use app\service\MailService;
use think\facade\Request;
class UserController
{
/**
* 发送注册验证码
*
* @return json
*/
public function sendRegisterVerifyCode()
{
$email = Request::post('email');
if (!validate_email($email)) {
return json(['code' => -1, 'msg' => '邮箱地址不正确']);
}
$mailService = new MailService();
if ($mailService->sendVerifyCode($email, 'register')) {
return json(['code' => 0, 'msg' => '验证码已发送']);
} else {
return json(['code' => -1, 'msg' => '验证码发送失败']);
}
}
}
```
其中,`validate_email` 是一个自定义的函数,用于验证邮箱地址的合法性。
阅读全文