Laravel在Mailable中使用MailMessage

问题描述 投票:4回答:2

我正在尝试在注册时向用户发送一封电子邮件,我创建了一个可邮寄的类:

<?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模板,但我的自定义内容?

谢谢。

laravel email
2个回答
5
投票

您将混合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 notification作为示例。

要将通知发送给用户:

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

通过这种方式,您可以使用默认邮件通知模板创建通用邮件。


0
投票

发布供应商的通知,您可以通过降价发送

    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());
    }
© www.soinside.com 2019 - 2024. All rights reserved.