Twinkle

Twinkle

Laravel Notifications メール通知で改行させる方法

普通にline()で「改行を含む文字列」を追加しても届くメールでは改行が消えている。

public function toMail(object $notifiable): MailMessage
{
    return (new MailMessage)
                ->line('改行を含む文字列');
}

改行が消える処理がどこにあるか調べるとformatLine()の最後。

    protected function formatLine($line)
    {
        if ($line instanceof Htmlable) {
            return $line;
        }

        if (is_array($line)) {
            return implode(' ', array_map('trim', $line));
        }

        return trim(implode(' ', array_map('trim', preg_split('/\\r\\n|\\r|\\n/', $line ?? ''))));
    }

https://github.com/laravel/framework/blob/8d4eaebc25d4349368d326f5fff80e15a0ffdd1d/src/Illuminate/Notifications/Messages/SimpleMessage.php#L232

入力された$lineがHtmlableやarrayなら改行が消えないことも分かる。
arrayにすれば簡単に解決。

public function toMail(object $notifiable): MailMessage
{
    return (new MailMessage)
                ->line(['改行を含む文字列']);
}

問い合わせフォームなどで改行も正しく表示したい場合はこれがいいだろう。