【PHP】送信メール本文をSmartyで作成する

Smartyによるメールテンプレート作成

PHPで実装するメール送信機能で、メール本文の組み立てにテンプレートエンジンのSmartyを使用する方法を紹介します。

viewテンプレートとして既にSmartyを導入している場合はメール文章の管理にも活用することをお勧めします。

Smartyの基本的な使用方法は下記記事で紹介しています。

Smarty(3.1)入門① 導入編

環境:PHP 7.4.10、 Smarty 3.1 (Composer)

送信メール本文を組み立てる

PHPで送信メール本文を組み立てる場合いくつかの手段があると思いますが、
一番ベタなパターンとしてメール送信関数に渡すパラメータへ以下のようにセットする方法があります。

$body = "下記の内容で、お問い合わせがありました。\n\n";
$body.= "==========================\n";
$body.= "■件名 :\n" . $_POST['subject'] . "\n\n";
$body.= "■お問い合わせ内容 :\n" . $_POST['contact'] . "\n\n";
$body.= "■お名前 :\n" . $_POST['name'] . "\n\n";
$body.= "■ふりがな :\n" . $_POST['kana'] . "\n\n";
$body.= "■メールアドレス :\n" . $_POST['mail'] . "\n\n";
$body.= "==========================";

必要な文言に加えクライアントからリクエストされた値、改行位置を文字列として連結させて本文を組み立てることが出来ますが、
内容が直感的にわかりにくいことや文言の変更があった際に修正が難しくなるデメリットが挙げられます。

また、プログラマでない人が編集したい場合などPHPのソースコードとは切り離しておきたいということもあると思います。

Smartyを使えばもっとカンタン

メール本文用のファイルをSmartyテンプレートとして作成します。

テンプレート用ディレクトリへ(例)mail.tplとして作成します。

下記の内容で、お問い合わせがありました。

==========================
■件名 :
{$subject}

■お問い合わせ内容 :
{$contact}

■お名前 :
{$name}

■ふりがな :
{$kana}

■メールアドレス :
{$mail}

==========================

fetchを実行

実行ファイル

$smarty = new Smarty();

$smarty->template_dir = __DIR__ . '/templates/';

$smarty->compile_dir = __DIR__ . '/templates_c/';

$smarty->assign($_POST);

$body = $smarty->fetch('mail.tpl');

上記のように本文中に埋め込みたいリクエスト値をassignでセットしておき、作成した本文テンプレートを引数にしてfetchメソッドを実行することで本文中の該当する変数に各値が割り当てられるようになります。(変数名はリクエスト値の名前と一致させておく)

Smartyで画面表示を実行するdisplayメソッドと仕組みが似ていますが、
fetchの実行結果は文字列を返すのでその返り値をそのまま本文データのパラメータとしてセットすることが出来ます。

このようにSmartyテンプレートを利用することで実際に送信する内容とほぼ近い形式で本文を用意しておくことが出来かつ、ソースコードとも分離できるので管理や保守がより行いやすくなります。

Follow me!