HTMLメールとテキストメールを同時に送信するマルチパートメールとは
今回はメールの基本的な仕組み「マルチパートメール」※1についてご紹介します。マルチパートメールは添付ファイルの送信などにも使われる技術ですが、今回のテーマであるHTMLメールとテキストメールを同時に送信する際にも利用されます。
背景
サポート宛に以下のようなお問い合せをいただくことがあります。
SendGridには、宛先アドレスごとにテキストメールとHTMLメールを送り分ける機能はありますか?
お問い合せの背景として、例えば携帯電話向けにはテキストメールを送り、PC向けにはHTMLメールを送りたい、という要望があると考えられます。※2
解決方法
SendGridでは宛先に応じてメール本文の形式を送り分ける機能はありません。また、一般的なメールの世界でも、宛先に応じてメール本文の形式を送り分ける、といったことは通常は行いません。
ではどうするのかというと、冒頭でご紹介した「マルチパートメール」と呼ばれる形式を利用して本文にHTMLパートとテキストパート両方を指定したものを送信します。どちらを表示するかは受信側が選択します。HTMLパートを表示する機能がないメーラや、HTMLパートの表示を設定により禁止しているメーラなどではテキストパートを表示し、HTMLパートが表示可能なメーラはHTMLパートを表示します。
仕組み
メールメッセージはヘッダとボディから構成される単純な構造をしています。ヘッダ部にはSubjectヘッダ(件名)や、Toヘッダ(宛先アドレス)、Fromヘッダ(送信元アドレス)など、いわゆるメッセージのメタデータに相当する情報が記載されます。一方、ボディ部にはメール本文の他、添付ファイルがテキスト変換された状態で記載されます。最も単純なテキストメールの場合、メッセージは以下のような構造となります。※3
ヘッダ部にあるContent-Typeヘッダの値「text/plain」がテキストメールであることを表しています。
一方、マルチパートメールは以下のような構造となります。
ヘッダ部にあるContent-Typeヘッダの値「multipart/alternative」がマルチパートメール(ボディ部が複数のパートに分けられている)であることを表しています。各パートは「boundary」で指定された文字列(上の例ではaaa)で区切られ、各パート内のContent-Typeの値によりテキストパート(text/plain)とHTMLパート(text/html)を識別できます。このような内容のメールを受信したメーラは設定や機能に応じてテキストパートもしくはHTMLパートを選択的に表示します。
HTMLパートのみのメールは送らない
メールの世界ではテキストメールが基本の形式です。HTMLメールは表現力を増強するための補助的なものと考えてください。このため、HTMLパートを送る際はテキストパートも一緒に送るのが一般的です。HTMLパートとテキストパートを両方指定することで次のような効果が期待できます。
- テキストパートしか表示できないメーラでもメールの内容を表示できる
- 迷惑メール判定されにくくなる
SendGridでマルチパートメールを送るには
SendGridには複数のメール送信方法がありますが、マルチパートメールの送信方法は以下の通りです。
- SMTP
上で説明した内容をボディ部に記載することで送信できます。通常は各プログラミング言語向けのSMTPライブラリ(JavaMail、Action Mailer、Swift Mailerなど)がサポートしてくれるでしょう。詳しくは各ライブラリのリファレンスをご確認ください。 - Web API
テキストパートとHTMLパートを指定するためのパラメータが用意されているので、各パラメータに指定して送信します - マーケティングキャンペーン機能
エディタ上でそれぞれのパートを入力して送信します
開封トラッキングできるのはHTMLパートが閲覧されたときだけ
ここで、マルチパートメールと開封トラッキングの関係についてちょっとだけ補足します。
開封トラッキングはHTMLパートに埋め込まれた画像へのアクセスをトリガとして行われます。このため、マルチパートメールの場合、HTMLパートを閲覧していて、かつコンテンツ内の画像表示を有効化している場合にのみトラッキングが可能になります。テキストパートしか表示できないメーラや、HTMLパートを表示しても設定によりコンテンツ内の画像表示を禁止しているメーラの場合、トラッキングはできません。
さいごに
マルチパートメールは昔から使われている基本的な仕組みですが、意外と忘れられがちです。この仕組みをうまく利用することで宛先の状況に応じた柔軟なコンテンツを構築できるので、特性を理解した上で上手に利用していきましょう。