Laravel не может отправлять письма - PullRequest
0 голосов
/ 28 июня 2018

Я смотрю на отправку приветствия по электронной почте через модель Eloquent с использованием события saved.

Кажется, все работает нормально, вплоть до отправки письма. Поэтому я добавил это вверху модели User.php.

protected $dispatchesEvents = [
  'saved' => \App\Events\UserCreated::class
];

Файл UserCreated.php содержит только базовый шаблон и назначение пользователя

<?php

namespace App\Events;

use App\Models\User;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Queue\SerializesModels;

class UserCreated extends Event
{
    use InteractsWithSockets, SerializesModels;

    /**
     * @var User
     */
    public $user;

    /**
     * Create a new event instance.
     *
     * @param User $user
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

Внутри EventServiceProvider.php Я слушаю, чтобы затем запустить файл SendWelcomeEmail.php.

 protected $listen = [
    'App\Events\UserCreated' => [
        'App\Listeners\SendWelcomeEmail'
    ]
];

SendWelcomeEmail.php выглядит так ...

<?php

namespace App\Listeners;

use App\Events\UserCreated;
use App\Mail\WelcomeEmail;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Mail;

class SendWelcomeEmail
{

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  UserCreated  $event
     * @return void
     */
    public function handle(UserCreated $event)
    {
        $user = $event->user;

        Mail::to($user->email_address)->send(new WelcomeEmail($user));
    }
}

Пока что я могу сделать dd внутри класса WelcomeEmail и увидеть, как он отображается на экране, однако запрос завершается, я получаю ответ обратно и не получаю ошибки. Однако письмо никогда не отправляется пользователю.

Я использую SendGrid для этого, и я точно следовал всему, что они вставили, я не вижу никаких запросов, поступающих в SendGrid, и запрос с моей стороны очень быстр, чтобы фактически отправить электронное письмо.

Я зарегистрировал почтовый конфиг и MailServiceProvider внутри app.php, поэтому я действительно не знаю, что это может быть.

Я также на 100% знаю, что получаю правильный адрес электронной почты пользователя и выкидываю, что получаю правильный ввод.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

Я думаю, ваш вызов метода может быть неправильным. Согласно документам (для 5.1 в любом случае), вы должны заключить функцию to() в обратный вызов:

Mail::send('your.email.blade', $blade_variables, function($msg) use ($user) {
    $msg->to($user->email_address);
});

Подробнее см. https://laravel.com/docs/5.1/mail#sending-mail.

...