Laravel 8 SendVerificationEmail 事件似乎没有触发

Laravel 8 SendVerificationEmail Event Seemingly Not Firing

我已按照 docs 中列出的说明进行电子邮件验证。我的用户模型实现了 MustVerifyEmail 接口,并且我在创建用户后在我的控制器中触发事件。我还验证了我可以通过 Tinker 发送随机电子邮件,它在 Mailhog 中有效并通过。

我在我的 UserController 中创建了一个应该触发事件的测试路由,但它似乎没有被触发:

    public function test()
    {
        Log::debug('testing email');
        $user = User::find(1);
        Log::debug($user);
        event(new Registered($user));
        Log::debug('event should have fired');
    }

在EventServiceProvider.php中:

    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];

在我的用户模型中:

namespace App\Models;

use Laravel\Sanctum\HasApiTokens;
use Laravel\Jetstream\HasProfilePhoto;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail;

class User extends Authenticatable implements MustVerifyEmail
{
...

它正在按预期写入日志,但没有电子邮件。我认为我没有遗漏文档中的任何步骤,而且我不确定如何进行故障排除。我如何调试事件,或者我在实施中遗漏了什么?

问得好,很高兴看到你已经采取的步骤和你提供的信息,很多人可以从中学习!

回到问题,我有一些建议你可以check/try。

  1. 检查您要向其发送邮件的用户是否尚未经过验证,SendEmailVerificationNotification 中的检查有此检查,这也让我感到困惑,为什么我没有正在收到邮件。并确保遵循文档中的这些步骤:https://laravel.com/docs/master/verification#the-email-verification-handler

    if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) {
        $event->user->sendEmailVerificationNotification();
    }
    
  2. 仔细检查您的日志,检查是否有任何 errors/exceptions 可以为您提供更多信息

  3. 因为你已经改变了你的供应商EventServiceProvider,尝试运行宁composer dump-autoload,它将重建需要类的列表包含在您的申请中。

  4. 您可以像您说的那样发送邮件,但是为了确定,请检查您的 .env 文件中的 QUEUE_CONNECTION 是否设置为 sync,如果不,你应该 运行 php artisan queue:work (不要忘记 --queue= 选项!)用于数据库驱动程序和 php artisan horizon (如果安装)用于 redis 驱动程序,否则事件可能是排队但不能 运行。对于调试,sync 驱动程序是最简单的。

我刚刚用一个新的 Laravel 应用程序尝试了您的步骤,一切正常(在执行上述步骤后,因为它在我的系统上也不起作用哈哈)

希望这份清单能帮助您解决问题,如果您有任何问题,请告诉我! :)