2017-03-31 113 views
1

我发邮件了通过toMail通道,这是从一个文本区域,在那里我打新行中输入两次救了,所以它看起来像这样输入:Laravel 5.3 - 邮件通知中的行之间没有中断?

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 

我变更的相关章节来源:

@foreach ($introLines as $line) 
    {{ $line }} 
@endforeach 

要:

@foreach ($introLines as $line) 
    {!! nl2br(htmlspecialchars($line)) !!} 
@endforeach 

但是,这仍然没有奏效。在分贝notifications表,它被保存为:

Line 1\n\nLine 2 with space above and below\n\nLine 3 

任何想法如何让发送的电子邮件显示的间距所以它不只是一个大斑点?

UPDATE:

所以laravel插入与在notifications\n\n通知,但它实际上是保存在model表是这样的:

enter image description here

而这一点正是通过到email,但仍不确定如何获得email中的空间。

+0

也许邮件是以html的形式发送的?如果是这样,请尝试添加'
'你想要空间的地方? – ImAtWar

+0

是它正在发送预期的html。这就是为什么我同时尝试'{! nl2br($ line))!!}'和'{!! nl2br(htmlspecialchars($ line))!!}'但是仍然没有空间... – Wonka

+0

nl2br只插入换行符。 HTML不能解释换行符。我认为最好的方法是在前后有一个'
'标签。 – ImAtWar

回答

0

请指定您的电子邮件类型为text/html。我认为laravel会自动但更好地使用我认为的观点。以下为我工作。 另一个简单的方法是为您的邮件文本创建视图并使用如下所示的 使用视图创建Mailable。

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("[email protected]", "From1 Name123") 
       ->view('super_admin.company-mail')->with(['data' => $this->company]); 
    } 
} 

我创造了这个可邮寄和工作正常,数据显示在表格格式。我和它的laravel 5.3。

+0

它确实发送为'text/html'我认为,因为它显示laravel'按钮/ css'和其他电子邮件样式/颜色页眉/页脚/等... – Wonka

+0

谢谢,但我想保持它与其他电子邮件一致'toMail'交付渠道文件中的通知。 – Wonka

+0

你会发布如何创建$文本并使用$ this->文本。 – webDev

0

只需添加一些HTML代码,以一个换到新行

@foreach ($introLines as $line) 
    <p>{{ $line }}</p> 
    // or use <br /> 
@endforeach 

但增加新的换行符在降价,你可以这样做:
1 -

要有没有段落的换行符,您将需要使用两个 尾随空格和一个enter

source

2 -
使用普通<br />

源:laravel docs

+0

这不会有效,原因有两个。 'Laravel'现在使用markdown作为电子邮件模板,但更重要的是,在编写电子邮件模板(标准laravel)时可能会使用许多不同的'$ line',所以我不希望将硬编码格式应用于其他行,就是这个'$ line',它在它使用的'$ text'变量中有间距。 – Wonka

+0

laravel已经添加了降价,但您仍然可以使用html来模板化您的电子邮件。 – hassan

+0

@Wonka结帐我的更新 – hassan

0

你输入文本包含换行符其中Laravel将自动去掉(参见Illuminate\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分割你的文字。由于“线”方法接受字符串或数组,你可以分割线,并通过他们的在一次:

return (new MailMessage)->subject('test spacing') 
    ->line(array_map('trim', preg_split('/\\r\\n|\\r|\\n/', $this->text))); 
0

您可以创建扩展MAILMESSAGE

class MyClassMailMessage extends MailMessage { 

    public function splitInLines($steps){ 
     $arrSteps = explode("\n", $steps); 
     if(!empty($arrSteps)){ 
      foreach ($arrSteps as $line) { 
       $this->with($line); 
      } 
      } 
     return $this; 
    } 
} 

类然后在你的通知中这样做

return (new MyClassMailMessage) 
    ->splitInLines($this->text);