Laravel 8手动实现用户注册时应在何处调度Registered事件发送验证邮件
Laravel 8手动注册功能验证邮件发送问题解决
1. 事件调度位置
事件需要放在用户创建成功之后执行,你修改后的storeUser方法如下:
public function storeUser(Request $request){ $validated = $request->validate([ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|email:rfc,dns', 'password' => ['required','confirmed', Password::min(8)], 'phone_number' => 'required' ]); $registeredDetails = User::create([ 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'email' => $request->email, 'password' => Hash::make($request->password), 'phone_number' => $request->phone_number ]); // 新增调度注册事件代码 event(new Registered($registeredDetails)); }
2. 其他可能导致验证邮件无法发送的问题排查
- 检查User模型是否实现了
MustVerifyEmail契约
你的app/Models/User.php需要引入对应接口,示例如下:use Illuminate\Contracts\Auth\MustVerifyEmail; class User extends Authenticatable implements MustVerifyEmail { // 模型原有内容 } - 检查EventServiceProvider的命名空间引入
你的EventServiceProvider.php头部需要添加监听器的命名空间,否则无法触发邮件发送逻辑:use Illuminate\Auth\Listeners\SendEmailVerificationNotification; - 修正邮件配置错误
你当前使用的465端口对应加密方式为ssl而非tls,修改.env中的配置项:MAIL_ENCRYPTION=ssl - 基础邮件发送测试
上述配置都修正后如果仍无法发送,可以先单独测试SMTP连通性,直接写测试代码发送简单邮件排查是否是SMTP服务本身的问题,比如账号密码错误、端口被服务器防火墙拦截等。
内容的提问来源于stack exchange,提问作者yussuf mussa
相关产品推荐
相关产品推荐

