CakePHP 3 でメール本文にプログラムで改行を挿入する方法

CakePHP 3 でメール本文にプログラムで改行を挿入する方法

岩佐 孝浩
岩佐 孝浩
3 min read
CakePHP

開発者は、メール本文の各行が 1,000 バイトを超えないように注意する必要があります。 そうでないと、文字化けしたテキストが送信される可能性があります。 これについては、RFC 5321RFC 5322 で言及されています。

RFC Specification

RFC 5321 4.5.3.1.6. Text Line

The maximum total length of a text line including the is 1000 octets (not counting the leading dot duplicated for transparency). This number may be increased by the use of SMTP Service Extensions.

RFC 5322 2.1.1. Line Length Limits

Each line of characters MUST be no more than 998 characters, and SHOULD be no more than 78 characters, excluding the CRLF. … However, there are so many implementations that (in compliance with the transport requirements of [RFC5321]) do not accept messages containing more than 1000 characters including the CR and LF per line, it is important for implementations not to create such messages.

解決策

CakePHP 3 では、 AbstractTransport クラスが提供されているため、開発者はこれを単純に継承し、 send メソッドをオーバーライドして、メール本文の各行に改行を挿入するコードを記述できます。 この投稿ではこれについては詳細に触れませんので、 Transport 機能の使用方法については公式ドキュメントをご参照ください。

特定の文字数で改行を挿入するには、マルチバイト文字を処理するために設計された Cake\Utility\Text::wordWrap を使用できます。 第四引数を true に設定すると、単語の途中でも改行が挿入されます。

$message = 'hogefuga';
$result  = Text::wordWrap($message, 4, "\n", true);
// Result: "hoge\nfuga"

まとめ

メール送信機能を実装する時は、各行が 1,000 バイトを超えないように意識しておく必要があります。

この投稿が、お役に立てば幸いです。

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023