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]