Php Laravel 5.3-邮件通知中的行与行之间没有中断?
我通过Php Laravel 5.3-邮件通知中的行与行之间没有中断?,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我通过toMail频道发送一封电子邮件,它是从一个文本区域保存的,在该文本区域中,我按两次enter键输入新行,因此在输入中看起来如下所示: Line 1 Line 2 with space above and below Line 3 当我在邮件中使用该文本时,如下所示: return (new MailMessage)->subject('test spacing') ->line($this->text); 在电子邮
toMail
频道发送一封电子邮件,它是从一个文本区域保存的,在该文本区域中,我按两次enter键输入新行,因此在输入中看起来如下所示:
Line 1
Line 2 with space above and below
Line 3
当我在邮件中使用该文本时,如下所示:
return (new MailMessage)->subject('test spacing')
->line($this->text);
在电子邮件中看起来是这样的:
Line 1 Line 2 with space above and below Line 3
我将email.blade.php
中的相关部分从:
@foreach ($introLines as $line)
{{ $line }}
@endforeach
致:
但这仍然不起作用。在数据库的通知
表中,它保存为:
Line 1\n\nLine 2 with space above and below\n\nLine 3
你知道如何让发送的邮件显示间距,这样就不只是一个大的斑点了吗
更新:
因此laravel
在notifications
表中插入带有\n\n
的通知,但它实际上保存在model
表中,如下所示:
return (new MailMessage)->subject('test spacing')
->line($this->text);
这是传递给
电子邮件的内容,但仍然不确定如何在电子邮件中获取这些空格指定您的电子邮件类型为文本/html
。我认为laravel会自动执行,但我认为使用视图更好。以下是我的工作。
另一个简单的方法是为邮件文本创建视图,并像这样使用
使用视图按如下方式创建邮件
class CompanyCreated extends Mailable
{
use Queueable, SerializesModels;
public $company;
public function __construct(Company $company)
{
$this->company = $company;
}
public function build()
{
return $this->subject("Alert: New Company added")
->from("fax@netinkvoice.com", "From1 Name123")
->view('super_admin.company-mail')->with(['data' => $this->company]);
}
}
我已经创建了这个邮件和工作良好,数据显示在表格格式。我和它的Laravel5.3。只需添加一些html标记,就可以对新行进行换行
@foreach ($introLines as $line)
<p>{{ $line }}</p>
// or use <br />
@endforeach
@foreach($introLines作为$line)
{{$line}
//或使用
@endforeach
但是,要在降价中添加换行符,您可以执行以下操作:
1-
要在没有段落的情况下换行,需要使用两个字符
带有一个的尾随空格输入
2-
使用普通的
来源:您的输入文本包含断行符,Laravel将自动删除该断行符(请参阅Lightning\Notifications\Messages\SimpleMessage
类的formatLine()
方法,该类是MailMessage
的基础)。您可以将MailMessage子类化并覆盖格式:
class CustomMailMessage extends MailMessage {
protected function formatLine($line) {
if (is_array($line)) {
return implode(' ', array_map('trim', $line));
}
// Just return without removing new lines.
return trim($line);
}
}
或者,您可以在将文本发送到MailMessage之前拆分文本。由于“line”方法接受字符串或数组,因此可以拆分行并一次性将它们全部传入:
return (new MailMessage)->subject('test spacing')
->line(array_map('trim', preg_split('/\\r\\n|\\r|\\n/', $this->text)));
您可以创建一个扩展MailMessage的类
像
然后在通知中这样做
return (new MyClassMailMessage)
->splitInLines($this->text);
也许邮件是以html格式发送的?如果是这样,请尝试将
添加到您希望共享空间的位置?是的,它按预期以html格式发送。这就是为什么我尝试了{!!nl2br($line))!!}
和{!!nl2br(htmlspecialchars($line))!!}
但仍然没有得到空间…nl2br只插入换行符。HTML不解释换行符。我认为最好的方法是在前后都有一个
标签。添加了一个更新。它确实以文本/html
的形式发送,我认为因为它显示了laravel按钮/css
和其他电子邮件样式/颜色页眉/页脚/等等…谢谢,但是我想让它与toMail
delivery channel文件中的其他电子邮件通知保持一致。请发布如何创建$text并将其用作$this->text。是否使用notifiable?这就是我设置的方式,在控制器中,我将记录保存到db并使用记录数据触发事件。事件上的通知侦听器将数据传递给构造函数,这就是我访问$text的方式,它可以工作,但消息中的每一行由于两个原因都无法工作,因此会再次发出spacing.put
标记Laravel
现在对电子邮件模板使用降价,但更重要的是,在编写电子邮件模板(标准Laravel)时可能会使用许多不同的$line
,因此我不希望硬编码格式应用于其他行,就这一行,在它使用的$text
变量中有空格。laravel已经添加了标记,但你仍然可以使用html模板你的电子邮件。你的意思是将
添加到$text
>我希望我知道如何转换它,这样它就可以按原样保存在数据库中,但是,当以$line
的形式发送到电子邮件时,它会添加分隔符。不,在email.blade.php中添加
,正如laravel在文档中提到的那样,您可以在您的标记模板{$line}}
中使用
,所以我在标记模板中这样做了,但没有更改。重要的是要认识到,{{$line}}必须有格式/正确的方式在其中显示,它之后的任何内容都不能改变其中的内容,比如它后面的
,因为它位于间距所在的变量内。这应该是可以接受的答案,因为它不仅解释了您可以使用MailMessage子类,还解释了您可以简单地将字符串数组传递给“line”方法。这对我来说是最简单的方法。
return (new MyClassMailMessage)
->splitInLines($this->text);