发送邮件与邮箱验证登录
发送邮件
- 配置qq邮件
qq邮箱设置->账户 SMTP部分设置获取授权码。
- 修改配置文件, 本地 .env, 线上 config/mail.php
// 以.env文件为例子MAIL_DRIVER=smtpMAIL_HOST=smtp.qq.comMAIL_PORT=25MAIL_USERNAME=sunvdong@qq.comMAIL_PASSWORD=nvmbsljczthocbde // 第一步获取的收取吗MAIL_ENCRYPTION=tlsMAIL_FROM_ADDRESS=sunvdong@qq.comMAIL_FROM_NAME=孙维栋
- 生成发送邮件的类
php artisan make:mail RegMail
class RegMail extends Mailable{
...
// 主要写发送邮件的方法
public function build()
{
// mail.reg 为邮件内容的视图 resources/views/mail/reg.blade.php
return $this->view('mail.reg');
// 设置主题等
//->from('hello@app.com', 'Your Application')
// ->subject('Event Reminder: ' . $this->event->name)
// ->view('emails.reminder')
// ->with(['title' => $this->event->name]);
}
}
- 测试发送
//
$user = User::find(1);
# 发送验证邮箱的邮件
\Mail::to($user)->send(new RegMail($user));
邮箱验证逻辑
- 注册账户状态未验证,生成唯一token -> 发送邮件,邮件内容一个附带token的链接
- 点击链接,根据token,找到用户,修改状态,自动登录
- 核心代码
// 注册
public function store(Request $request)
{
$data = $this->validate($request, [
'name' => 'required|min:4',
'email' => 'required|unique:users|email',
'password' => 'required|min:6|confirmed'
]);
$data['password'] = bcrypt($data['password']);
# 注册用户
$user = User::create($data);
# 发送验证邮箱的邮件
\Mail::to($user)->send(new RegMail($user));
session()->flash('success', '成功,请登录邮箱验证邮件');
return redirect()->route('home');
}
//邮箱链接 reg.blade.php
<a href="{{route('confirmEmailToken',$user['email_token'])}}">激活账户</a>
// 验证
public function confirmEmailToken($token)
{
$user = User::where('email_token', $token)->first();
if ($user) {
$user->email_active = true;
$user->save();
auth()->login($user);
session()->flash('验证成功');
return redirect('/');
}
session()->flash('danger', '邮箱验证失败');
return redirect('/');
}
