You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:36:04