私は単純な Email() クラスを持っています。私のウェブサイトからメールを送信するために使用されます。
<?
Email::send($to, $subj, $msg, $options);
?>
また、いくつかの PHP 変数を突き刺したプレーンな HTML で記述されたメール テンプレートも多数用意しています。例/inc/email/templates/account_created.php
:
<p>Dear <?=$name?>,</p>
<p>Thank you for creating an account at <?=$SITE_NAME?>. To login use the link below:</p>
<p><a href="https://<?=$SITE_URL?>/account" target="_blank"><?=$SITE_NAME?>/account</a></p>
PHP 変数をレンダリングするにはinclude
、テンプレートを関数に組み込む必要がありました。しかしinclude
、コンテンツを返さず、出力に直接送信するだけなので、バッファ関数でラップする必要がありました。
<?
abstract class Email {
public static function send($to, $subj, $msg, $options = array()) {
/* ... */
ob_start();
include '/inc/email/templates/account_created.php';
$msg = ob_get_clean();
/* ... */
}
}
その後、関数スコープ内にあるため、PHP 変数がレンダリングされないことに気付きました。そのため、テンプレート内の変数をグローバル化する必要がありました。
<?
global $SITE_NAME, $SITE_URL, $name;
?>
<p>Dear <?=$name?>,</p>
...
問題は、これに対するよりエレガントな解決策があるかどうかです。ob_start()
主に、 と を使用した回避策が心配ですglobal
。どういうわけか、私には奇妙に思えます。それとも、これはかなり一般的な方法ですか?