2017-03-31 108 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);