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

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

で、

cakePHPで日本語メール送信

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

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

[php] <?php require_once('Mail.php');

class MyEmailComponent extends Object{

var $controller = null;

// var $layout = 'dafault'; var $layout = null;

var $sendAs = 'text';
var $from = null;
var $to = null;
var $subject = null;
var $mail = null;
var $data = array();

function startup(&$controller) {
    $this->controller =& $controller;
    $this->mail = Mail::factory('mail');
}

function send() {

   $from = $this->from;
   $to = $this->to;
   $subject = $this->subject;

    $subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8');
    $headers = array();
    $headers['From'] = $this->from;
    $headers['Subject'] = 
        mb_encode_mimeheader( $subject, 'ISO-2022-JP');

    $body = $this->__renderTemplate();
    $body = mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8');

    $this->mail->send($to, $headers, $body);

    return;
}

function __renderTemplate() {
    $viewClass = $this->controller->view;

    if ($viewClass != 'View') {
        if (strpos($viewClass, '.') !== false) {
            list($plugin, $viewClass) = explode('.', $viewClass);
        }
        $viewClass = $viewClass . 'View'; 
        loadView($this->controller->view); 
    }
$View = new $viewClass($this->controller, false);
$View->layout = $this->layout;

$content = $View->renderElement('email' . DS . $this->sendAs . DS . $this->template, $this->data, true);

if ($View->layout) {            
    $View->layoutPath = 'email' . DS . $this->sendAs;
    $msg = $View->renderLayout($content);
} else {
  $msg = $content;
}

return $msg;
}

}[/php]
使い方。

[php] <?php $this->MyEmail->from = 'fromaddress@example.com'; $this->MyEmail->to = 'toaddress@example.com'; $this->MyEmail->subject = '件名'; $this->MyEmail->data = array('aiueo' => "適当なデータ"); $this->MyEmail->template = 'test'; $this->MyEmail->send(); [/php]