PHP メール送信/ハイブリッド(テキスト&HTML)メール送信


<?php

// 送信元のメールアドレス
$from = 'from@example.com';

// 送信先のメールアドレス
$to = 'to@example.com';

// 件名
$subject = '件名';

// 本文(HTML形式)
$html = '<html><body><h1>本文</h1></body></html>';

// 本文(テキスト形式)
$text = '本文';

// 送信元のメールアドレス
$header = 'From: '. mb_encode_mimeheader($from) . ' <' . $from . '>';

// Content-Typeをmultipart/alternativeに設定
$header .= "\nContent-Type: multipart/alternative; boundary=__BOUNDARY__";

// メール本文を作成
$body = "--__BOUNDARY__\n";
$body .= "Content-Type: text/plain; charset=UTF-8\n";
$body .= "Content-Transfer-Encoding: base64\n\n";
$body .= base64_encode($text);
$body .= "\n--__BOUNDARY__\n";
$body .= "Content-Type: text/html; charset=UTF-8\n";
$body .= "Content-Transfer-Encoding: base64\n\n";
$body .= base64_encode($html);
$body .= "\n--__BOUNDARY__--";

// 送信
mb_send_mail($to, $subject, $body, $header);

?>

上記のスクリプトでは、以下のような流れでテキストメールとHTMLメールを混在させて送信しています。

送信元のメールアドレス、送信先のメールアドレス、件名、本文を設定する。
mb_encode_mimeheader関数を使って、送信元のメールアドレスをMIMEエンコードする。
Content-Typeをmultipart/alternativeに設定する。

メール本文を作成する。
boundaryパラメータを設定し、テキストメールとHTMLメールを区切るための文字列(ここではBOUNDARY)を定義する。
テキストメールのContent-Typeをtext/plainに設定し、Content-Transfer-Encodingをbase64に設定する。
テキストメールの本文をbase64_encode関数でエンコードする。
HTMLメールのContent-Typeをtext/htmlに設定し、Content-Transfer-Encodingをbase64に設定する。
HTMLメールの本文をbase64_encode関数でエンコードする。
メール本文の最後に、boundaryパラメータで定義した文字列を終わりを示すための文字列(–BOUNDARY–)を追加する。
mb_send_mail関数を使って、送信先のメールアドレス、件名、本文、MIMEエンコードされた送信元のメールアドレスを指定して、テキストメールとHTMLメールを混在させたメールを送信する。