はじめに
実務にて、お問い合わせ画面のメール本文をテンプレート化する作業があり、それを解決した情報になります。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 の検索文字列を引数に追加するなどの工夫をすると良いです。
以上です。
おわりに
サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。