PPHMailerなる物を見つけて余りに便利そうなんでラップしてみた。
まーぶっちゃけ拡張の必要もあんまり無いんだけど拡張してみた(笑
smartyとの夢のコラボでメール本文をテンプレートから生成。
おおまかなコードは以下
require("Smarty.class.php");
require("class.phpmailer.php");
class ExtMailer extends PHPMailer{
var $tmpEngine;
var $tpl;
function MailWrapper($confFile,$confname){
$templateEngine = new Smarty();
$templateEngine->template_dir = "template";
$templateEngine->compile_dir = "template_c";
$templateEngine->config_dir = "config";
$templateEngine->cache_dir = "cache";
$this->tmpEngine = $templateEngine; if($confFile != null || $confFile != ""){
$this->initMailSettings($confFile,$confname);
}
}
function initMailSettings($confFile,$confname){
$mailconf = parse_ini_file($confFile,TRUE);
$conf = $mailconf[$confname];
$this->From = $conf['From'];
$this->FromName = $conf['FromName'];
$this->Host = $conf['Host'];
$this->Subject = $conf['Subject'];
if($conf['Mailer'] == null || $conf['Mailer'] == ""){
$this->Mailer = 'SMTP';
}else{
$this->Mailer = $conf['Mailer'];
}
if($conf['CharSet'] == null || $conf['CharSet'] == ""){
$this->CharSet = 'iso-2022-JP';
}else{
$this->CharSet = $conf['CharSet'];
}
$this->body = "";
$this->ClearAttachMents();
$this->ClearAddresses();
if($conf['To'] != null || $conf['To'] != ""){
$addresses = explode(',',$conf['To']);
foreach($addresses as $address){
$this->AddAddress($address);
}
}
}
function assign($name,$value){
$templateEngine = $this->tmpEngine;
$templateEngine->assign($name,$value);
$this->tmpEngine = $templateEngine;
}
function setMailTemplate($tpl){
$this->tpl = $tpl;
}
function createBody(){
$this->Body = "";
$templateEngine = $this->tmpEngine;
$tmpbody = $templateEngine->fetch($this->tpl);
$this->Body = $tmpbody;
}
}
概要は、インスタンス作成時に設定ファイルを読み込んでメールの設定
を済ませてしまう。その時にSmartyのオブジェクトも生成。
あとは変数の設定(assign)とテンプレートセット(setMailTemplate)で
本文の作成。
あとはメールを送信するだけのシンプル拡張、、、のはずでしたが、
何故かメールが送信されずに困っちゃいました。。。
かなーり調べてからどうも根本的におかしいようなので、PHPMailerのソース
を見てみる事に。
そしたら原因はcreateBodyというメソッドがprivateメソッドとして存在する
みたいで、自分が拡張した奴が丁度オーバーライドしてたのがマズッた
ようでした。
名前をcreateBody()から変更したらうまくいきましたとさ。
P.S
PHPdocにcreateBodyのAPIが載ってなかったぞ~。
0 件のコメント :
コメントを投稿