发送后显示带有降价的 Laravel 通知(MailMessage)
Posted
技术标签:
【中文标题】发送后显示带有降价的 Laravel 通知(MailMessage)【英文标题】:Display Laravel Notification (MailMessage) with markdown after sent 【发布时间】:2020-05-13 00:29:36 【问题描述】:通过创建函数storeEmail
并将MailMessage
类插入EmailMessage
模型,我将发送给实体的每封电子邮件保存到数据库中。一切正常,主要的目标是在收件人收到邮件时完全按原样显示邮件,并将我作为User
发送的所有邮件检索到一个页面。为了更容易在 foreach 循环中检索每个特定消息的渲染,我认为最好从模型中获取它。
这是我的通知类:
class SimpleEmail extends Notification
use Queueable;
private $link;
private $user;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($link)
$this->link = $link;
$this->user = Auth::user();
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
return ['mail'];
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
$mail = (new MailMessage)
->from($this->user->email, $this->user->name)
->subject('My Dummy Subject')
->greeting('To: '.$notifiable->email)
->action('Action Button', url($this->link))
->line('Thank you for reading my message')
->salutation('Friendly, '.$this->user->name);
$this->storeEmail($mail,$notifiable);
return $mail;
public function storeEmail($mail,$notifiable)
$email = new EmailMessage;
$email->sender_type = 'App\User';
$email->sender_id = $this->user->id;
$email->mail = $mail;
$email->save();
$notifiable->email_messages()->save($email);
Note:
-
我正在使用
Illuminate\Notifications\Messages\MailMessage
我的课程扩展Illuminate\Notifications\Notification
我将(新的 MailMessage)保存在 $email->mail = $mail;
我尝试dd($email->mail);
得到了这个:
^ array:20 [▼
"view" => null
"viewData" => []
"markdown" => "notifications::email"
"theme" => null
"from" => array:2 [▶]
"replyTo" => []
"cc" => []
"bcc" => []
"attachments" => []
"rawAttachments" => []
"priority" => null
"callbacks" => []
"level" => "info"
"subject" => "My Dummy Subject"
"greeting" => "To: Dohn John"
"salutation" => "Friendly, Nikolas Diakosavvas"
"introLines" => array:2 [▶]
"outroLines" => array:1 [▶]
"actionText" => "Action Button"
"actionUrl" => "http://my-example-url.com ▶"
如何显示邮件通知,就像我发送它时一样?什么是最佳解决方案? 谢谢,提前
已编辑
设法使用此代码呈现 MailMessage 作品:
$email = EmailMessage::first();
return (new \App\Notifications\SimpleEmail('my-link', $email->recipient->assignto))->toMail($email->recipient);
但这并不是我想要的,因为每次我都需要找到:
-
每封电子邮件都使用了哪个通知类,以便我可以呈现它。
每个通知类的变量。
【问题讨论】:
您可以在浏览器中渲染它们laravel.com/docs/master/mail#rendering-mailables 是的,我知道,但是如何呈现来自EmailMessage
模型的消息?因为,从 Model 中访问消息比每次都搜索 Notification 类并传递必要的变量更容易。
在文档中他们有 return (new App\Mail\InvoicePaid($invoice))->render();
所以在你的例子中,尝试只传递 $email
或 $email->mail
代替他们的 $invoice。更正原因的可邮寄路径
不,它不起作用,因为$invoice
是InvoicePaid
类中使用的变量
【参考方案1】:
为了做到这一点:
1.您可以创建accessor。
2.使用Markdown的render
方法。
3. 将您保存在storeEmail
中的邮件降价 传入render
方法。
你可以看上面的例子:
use \Illuminate\Mail\Markdown;
public function getRenderAttribute()
$markdown = new Markdown(view());
return $markdown->render($this->mail['markdown'], $this->mail);
【讨论】:
以上是关于发送后显示带有降价的 Laravel 通知(MailMessage)的主要内容,如果未能解决你的问题,请参考以下文章