Laravel использует MailMessage в Mailable - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь отправить пользователям электронное письмо, когда они регистрируются, я создал класс для отправки:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;

public $user;
public $message;
/**
 * Create a new message instance.
 *
 * @return void
 */
public function __construct($user)
{
    $this->user = $user;

    $this->message = (new MailMessage)
        ->greeting('Bonjour '.$user->name)
        ->line('Nous vous remercions de votre inscription.')
        ->line('Pour rappel voici vos informations :')
        ->line('Mail: '.$user->email)
        ->line('Password: '.$user->password);
}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->view('message')->with([
        'slot' => $this->message
    ]);


}

Но если я использую пользовательский шаблон, мне нужно сделать все css и Html, я вижу, что электронное письмо с забытым паролем использует MailMessage, и все шаблоны уже сделаны с шаблоном MailMessage.

Могу ли я использовать один и тот же шаблон или напрямую создать шаблон MailMessage, но с моим пользовательским содержимым?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Публикуйте уведомления от поставщика, и вы можете отправить его в уценке

    public function __construct($user)
    {
        $this->user = $user;

        $this->message = (new MailMessage)
            ->greeting('Bonjour '.$user->name)
            ->line('Nous vous remercions de votre inscription.')
            ->line('Pour rappel voici vos informations :')
            ->line('Mail: '.$user->email)
            ->line('Password: '.$user->password);
    }

    /**
    * Build the message.
    *
    * @return $this    
    */
    public function build()
    {
         return  $this->markdown('vendor.notifications.email', $this->message->data());
    }
0 голосов
/ 05 июля 2018

Вы смешиваете 2 отдельные концепции Laravel, уведомления и почтовые программы. Уведомления могут быть отправителями, но не могут быть отправителями.

Класс MailMessage является уведомительным сообщением, но не может быть сообщением для Mailable. Чтобы отправить MailMessage почтовую программу, вы должны расширить класс Notification:

<?php

namespace App\Notifications;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Bus\Queueable;

class WelcomeNotification extends Notification implements ShouldQueue
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct($user)
    {
        // The $notifiable is already a User instance so not really necessary to pass it here
        $this->user = $user;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {

        return (new MailMessage)
            ->greeting('Bonjour '.$this->user->name)
            ->line('Nous vous remercions de votre inscription.')
            ->line('Pour rappel voici vos informations :')
            ->line('Mail: '.$this->user->email)
            ->line('Password: '.$this->user->password);
    }

}

Также см. Laravel's ResetPassword Уведомление в качестве примера.

Чтобы отправить уведомление пользователю:

$user->notify(new WelcomeNotification($user));

Таким способом вы можете создавать общие почтовые сообщения, используя шаблон почтового уведомления по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...