我试图在用户注册时向他们发送电子邮件,我创建了一个可邮寄的类:
<?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模板吗?
谢谢。
答案 0 :(得分:5)
您正在混合使用2个独立的Laravel概念,即Notifications和Mailers。通知可以是邮件,但邮件不能是通知。
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));
通过这种方式,您可以使用默认的邮件通知模板来创建通用邮件。
答案 1 :(得分:2)
我在 Laravel 8 中使用过这个,不确定它是否仍然与以前版本的 Laravel 兼容。
重点是在 html
中使用 Mailable
方法。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Queue\SerializesModels;
class MyMail extends Mailable
{
use Queueable, SerializesModels;
public function build()
{
return $this->subject('My Subject')
->html((new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!')
->render()
);
}
}
答案 2 :(得分: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());
}
答案 3 :(得分:0)
您不必使用markdown,仅因为您可能想升级laravel。 https://laravel.com/docs/5.6/notifications#mail-notifications
指定视图
return $mail->view('emails.default');