Почта Laravel 5.5 с именем пользователя в ней

Я думаю, что упустил что-то действительно простое здесь, но у меня есть такой скрипт:

\Mail::to( User::all() )
             ->send( new NotificationEmail($notification) );

class NotificationEmail extends Mailable {
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @param Notification $notification
     *
     */
    public function __construct( Notification $notification ) {
        $this->notification = $notification;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build() {
        $notification = $this->notification;

        return $this
            ->from( [
                'address' => \env( 'MAIL_DEFAULT_SENDER' ),
                'name'    => \env( 'APP_NAME' )
            ] )
            ->view( 'email.notification.ready' );
    }
}

Теперь я хотел бы, чтобы сообщение электронной почты начиналось с чего-то вроде

Уважаемый {firstname of the user} Но я понятия не имею, как узнать имя пользователя, который получит это электронное письмо. Есть ли способ выяснить это?


person Community    schedule 25.10.2017    source источник
comment
Проверьте документы для просмотра данных   -  person ljubadr    schedule 25.10.2017
comment
У меня есть. Поскольку я передаю User::all(); на почту, я не могу просто добавить его в качестве параметра в свой класс NotificationEmail. Не могли бы вы объяснить, как я могу добиться этого, не написав уродливый цикл?   -  person    schedule 25.10.2017
comment
Это хороший вопрос.. Я не уверен   -  person ljubadr    schedule 25.10.2017
comment
У меня была такая же проблема, и единственный метод, который я нашел, - это сделать цикл, так что это интересный вопрос. Я следую!   -  person LorenzoBerti    schedule 25.10.2017
comment
Что содержит $this->notification? он не заполнен пользовательскими переменными?   -  person Ohgodwhy    schedule 25.10.2017
comment
@Ohgodwhy, нет, это просто сообщение и ссылка на скачивание   -  person    schedule 25.10.2017


Ответы (1)


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

Вам нужно создать отдельные Mailable для каждого пользователя и поставить в очередь все Mailable. Отправка электронной почты всем пользователям по отдельности — трудоемкая задача, рабочие должны обрабатывать очередь в фоновом режиме.

$users = User::all();
foreach ($users as $user) {
    Mail::to($user)->queue(new NotificationEmail($notification, $user));
}

И теперь вы можете передать экземпляр $user, и имя пользователя доступно в представлении:

public function __construct( Notification $notification , User $user) {
    $this->notification = $notification;
    $this->user = $user;
}

public function build() {
    $notification = $this->notification;

    return $this
        ->from( [
            'address' => \env( 'MAIL_DEFAULT_SENDER' ),
            'name'    => \env( 'APP_NAME' )
        ] )
        ->view( 'email.notification.ready' , [
            'user' => $this->user
        ]);
}
person Ben    schedule 04.02.2018