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, );
の部分で設定します。
ただ、実際に使っていると
- メールの件名についてもテンプレートファイルで管理したい。仕様としてはテンプレートファイルの1行目をメールの件名とする。2行目以降をメールの本文として扱うという感じです。
- レイアウトについても変数を利用したい。
と思いましたので、EMailerクラスのラッパーを作成しました。
といってもgetView関数を以下のようにちょこっと修正しただけなんですが。
public function 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; ?>
2件のコメント
コメントは受け付けていません。