PHP でメール本文をテンプレート化する方法

はじめに

実務にて、お問い合わせ画面のメール本文をテンプレート化する作業があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。

検証環境

サンプル

解説

メール本文のテンプレート化とは、メール本文を外部ファイル化して、非エンジニアでもメール本文を簡単に編集できるようにする作業です。

ソースコードの中からメール本文を探し出す手間が省けるので、管理が楽になるなどのメリットがあります。

まずは、下記のようなメール本文のテンプレートファイル(.tpl)を作成します。二重波括弧 {{ }} で囲まれている部分は、フォームデータによって動的に置換される部分です。

お問い合わせフォームより、メッセージを受信しました。

メールアドレス:{{メールアドレス}}

▼お問い合わせ内容
-------------------------------------------------------
{{お問い合わせ内容}}
-------------------------------------------------------

次は、テンプレートファイルを バッファリング します。

バッファーとは、「緩衝」という意味があり、データを一時的に保存できる記憶領域、又は装置のことです。

バッファリングとは、スクリプトの出力をブラウザへ送信する前に、バッファーへ保存することです。バッファリングの利点は、出力をバッファーへ溜め込んでから、任意の時点で送信ができるので、パフォーマンスが向上するというところです。

ビジネスシーンでは、バッファーは「余裕」や「ゆとり」という意味になります。例えば、「プロジェクトが全て順調に進めば 3 ヶ月後に納品できますが、バッファーを持たせて、クライアントには 4 ヶ月後に納品できますと伝えるのが無難でしょう。」みたいな感じです。

下記のように、ob_start でバッファリングを有効化して、テンプレートファイルを include で読み込み、ob_get_contents でバッファの内容を変数に格納してから、ob_end_clean でバッファをクリアしてバッファリングを無効化します。

ob_start();
include __DIR__ . '/mail.tpl';
$mail_template = ob_get_contents();
ob_end_clean();

テンプレートファイルの二重波括弧で囲った文字列とフォームデータを配列に格納して、str_replace で置換します。あとは、mb_send_mail でメールを送信するだけです。

$search = ['{{メールアドレス}}', '{{お問い合わせ内容}}'];
$replace = [$from, $message];
$body = str_replace($search, $replace, $mail_template);

ユーザーへの自動返信メールも同じ要領でテンプレート化できます。

1 つの関数で複数のテンプレートを切り替えてメール送信したい場合は、テンプレートパスの定数化や str_replace の検索文字列を引数に追加するなどの工夫をすると良いです。

以上です。

おわりに

サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。