最近、企業から送られてくる宣伝メールなどは、HTMLでデザインされたメールが多くなりました。
以前はメーラーの脆弱性を考えてテキスト表示設定にしていましたが、そのような使い方は最早時代遅れのようです。
メール送信でHTMLメールを、WordPressでどのように送信しようか考えておりますが、先にデータ構造について確認しようかと思います。ただし、まだまとめ記事にできるほど情報を集めていないため、今回は備忘録の記事です。
当方が利用しているValue DomainからHTMLメールが来ましたので、内容を確認してみました。
インターネット上で通信されるメールデータは、制御文字を避けて透過性のある文字コードに変換して通信されます。
そのためメーラーでは日本語表示されていても、素のメールデータは文字コードが変換されていて読めません。
Macのメーラーで素のメールデータを取得したい場合、以下の手順でファイル出力するようにします。
HTMLメールデータは大きく3つのブロックからなり、ブロックの終了にヘッダーで指定された「boundary=”…”」の文字列が行追加され、ブロックの境界として設定されます。
当方の確認したメールデータは、3つのブロックがそれぞれヘッダー、プレーンテキストのメールデータ、HTMLのメールデータになっていました。
ブロック内はメール本文になりますが、ブロックの先頭に次の2つの指定がなされています。
Content-Typeは、テキストの場合は「text/plain; charset=”iso-2022-jp”」が、HTMLの場合は「text/html; charset=”iso-2022-jp”」がそれぞれ設定されていました。
Content-Transfer-Encodingは、「text/plain」の場合は「7bit」が、「text/html」では「7bit」がせっていされているものと、「quoted-printable」が設定されているものがありました。
PHPで「iso-2022-jp」をUTF-8に変換するには、「mb_convert_encoding()」を利用します。
$src = mb_convert_encoding($str, 'utf-8', 'iso-2022-jp');
もし「quoted-printable」が設定されていたら、「quoted_printable_decode()」を利用して次のように変換します。
$src = mb_convert_encoding(quoted_printable_decode($str), 'utf-8', 'iso-2022-jp');