Yiiでメールまわりの設定を行います。利用するのは、mailerというエクステンションです。
設定は、エクステンションをダウンロードし、protected/extensions以下に展開するだけで完了します。
使う際は、コントローラやモデル内で
$to='abc@example.com';
$from='def@exapmple.com';
$subject='件名です';
$charset='iso-2022-jp';
$encoding='7bit';
$layout='main';
$view='regist';
mb_language('Japanese');
mb_internal_encoding('UTF-8');
$mailer = Yii::createComponent('application.extensions.mailer.EMailer');
$mailer->CharSet = $charset;
$mailer->Encoding = $encoding;
$mailer->addAddress($to);
$mailer->From=$from;
$vars=array(
'sitename'=>Yii::app()->name,
);
$mailer->getView($view,$vars,$layout);
$subject=mb_convert_encoding($subject,$charset,mb_internal_encoding());
$mailer->Subject=mb_encode_mimeheader($subject);
$mailer->Body=mb_convert_encoding($mailer->Body,$charset,mb_internal_encoding());
$mailer->send(); のように書けばよいです。なお、
$layout='main';
はメール本文で利用するレイアウトです。内容はprotected/views/email/layous/main.phpに以下のような感じに書きます。
$contentにはメール本文が置換されます。
レイアウトのヘッダ部分です。 <?php echo $content; ?> レイアウトのフッタ部分です。
レイアウトを利用しない場合は、
$layout=null;
のようにします。
$view='regist';
はメール本文で利用するテンプレートです。内容は、protected/views/email/regist.phpに以下のような感じに書きます。
メール本文です。 サイト名: <?php echo $sitename; ?>
テンプレートで利用できる変数は
$vars=array( 'sitename'=>Yii::app()->name, );
の部分で設定します。
ただ、実際に使っていると
と思いましたので、EMailerクラスのラッパーを作成しました。
といってもgetView関数を以下のようにちょこっと修正しただけなんですが。
public getView($view, $vars = array(), $layout = null)
{
$body = Yii::app()->controller->renderPartial($this->pathViews.'.'.$view, array_merge($vars, array('content'=>$this->_myMailer)), true);
list($subject,$body)=explode("\n",$body,2);
$this->_myMailer->Subject=$subject;
if ($layout === null) {
$this->_myMailer->Body = $body;
}
else {
$this->_myMailer->Body = Yii::app()->controller->renderPartial($this->pathLayouts.'.'.$layout, array_merge($vars, array('content'=>$body)), true);
}
} なお、これを使う場合、mailerエクステンションの使用方法は以下のような感じになります。
$to='abc@example.com';
$from='def@exapmple.com';
$charset='iso-2022-jp';
$encoding='7bit';
$layout='main';
$view='regist';
mb_language('Japanese');
mb_internal_encoding('UTF-8');
$mailer = Yii::createComponent('application.extensions.mailer.EMailer');
$mailer->CharSet = $charset;
$mailer->Encoding = $encoding;
$mailer->addAddress($to);
$mailer->From=$from;
$vars=array(
'sitename'=>Yii::app()->name,
);
$mailer->getView($view,$vars,$layout);
$mailer->Subject=mb_convert_encoding($mailer->Subject,$charset,mb_internal_encoding());
$mailer->Subject=mb_encode_mimeheader($mailer->Subject);
$mailer->Body=mb_convert_encoding($mailer->Body,$charset,mb_internal_encoding());
$mailer->send(); また、protected/views/email/regist.phpの内容も以下のようにします。
件名です。 メール本文です。 サイト名: <?php echo $sitename; ?>