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);