2008/1/19 土曜日

CakePHP1.2で深いこと考えずに日本語メール

Filed under: 技術メモ — dev0000 @ 3:24:21 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

なんか深夜映画って訳わからんな。
聞いたこともないイギリスの青春映画がやっている。

で、

cakePHPで日本語メール送信

まぁ素直にPEAR::Mail を使ってしまってもいいんじゃないかと思うのです。

CakePHP1.2のオリジナルのEmailComponentから使えそうな箇所(レンダリングとか)を借りつつ作成。

PHP:
  1. <?php
  2. require_once('Mail.php');
  3.  
  4. class MyEmailComponent extends Object{
  5.    
  6.     var $controller = null;
  7. //  var $layout = 'dafault';
  8.     var $layout = null;
  9.  
  10.     var $sendAs = 'text';
  11.     var $from = null;
  12.     var $to = null;
  13.     var $subject = null;
  14.     var $mail = null;
  15.     var $data = array();
  16.    
  17.     function startup(&$controller) {
  18.         $this->controller =& $controller;
  19.         $this->mail = Mail::factory('mail');
  20.     }
  21.  
  22.     function send() {
  23.        
  24.        $from = $this->from;
  25.        $to = $this->to;
  26.        $subject = $this->subject;
  27.        
  28.         $subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8');
  29.         $headers = array();
  30.         $headers['From'] = $this->from;
  31.         $headers['Subject'] =
  32.             mb_encode_mimeheader( $subject, 'ISO-2022-JP');
  33.         
  34.         $body = $this->__renderTemplate();
  35.         $body = mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8');
  36.        
  37.         $this->mail->send($to, $headers, $body);
  38.        
  39.         return;
  40.     }
  41.  
  42.     function __renderTemplate() {
  43.         $viewClass = $this->controller->view;
  44.  
  45.         if ($viewClass != 'View') {
  46.             if (strpos($viewClass, '.') !== false) {
  47.                 list($plugin, $viewClass) = explode('.', $viewClass);
  48.             }
  49.             $viewClass = $viewClass . 'View';
  50.             loadView($this->controller->view);
  51.         }
  52.     $View = new $viewClass($this->controller, false);
  53.     $View->layout = $this->layout;
  54.    
  55.     $content = $View->renderElement('email' . DS . $this->sendAs . DS . $this->template, $this->data, true);
  56.    
  57.     if ($View->layout) {           
  58.         $View->layoutPath = 'email' . DS . $this->sendAs;
  59.         $msg = $View->renderLayout($content);
  60.     } else {
  61.       $msg = $content;
  62.     }
  63.    
  64.     return $msg;
  65.     }
  66. }

使い方。

PHP:
  1. <?php
  2.         $this->MyEmail->from = 'fromaddress@example.com';
  3.         $this->MyEmail->to = 'toaddress@example.com';
  4.         $this->MyEmail->subject = '件名';
  5.         $this->MyEmail->data = array('aiueo'  => "適当なデータ");
  6.         $this->MyEmail->template = 'test';
  7.         $this->MyEmail->send();

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

HTML convert time: 0.557 sec. Powered by WordPress ME