▼ CakePHPメールコンポーネントとして送信する
■概要
Qdmailは、バージョン0.7.6a(アルファ)から、CakePHPのコンポーネントとしても、動作するようになりました。CakePHPコンポーネントとしての動作のさせ方は、ver0,ver1共通です。
Semailよりも高機能になりました。
CakePHPのテンプレート、ビュー機能を利用することができます。
TEXTメールはもちろん、添付ファイル、HTMLメール、デコメもCakePHPから簡単に送信できます。
使い方:
CakePHPでの使い方
CakePHPでのSMTP送信
関連記事:
CakePHPコントローラーをメール受信をきっかけに起動する
さくらインターネットでリアルタイムメール処理
■特徴
- CakePHP1.1 , 1.2 の両方に対応
- 同じファイルで、通常の使い方もOK,CakePHPもOK(自動判別)
- CakePHPの強力なrender機能を使用可能
記事リスト
- 使い方 CakePHPでのメール送信 (2008-04-24)
- CakeでSMTP送信する (2008-05-01)
- TB-URL http://hal456.net/qdmail/022/tb/
# sandman 2008年06月26日(木) 午後6時58分
QdmailをCake1.2RC1で使用しています。
基本的には、とても満足していますが、cakeText()とcakeHtml()が下記のエラーが出て使用できません。
Notice (8): Undefined property: Controller [APP/controllers/components/qdmail.php, line 3073]
Notice (8): Undefined property: Controller [APP/controllers/components/qdmail.php, line 3079]
text()とhtml()を使ってれば良いので、問題は無いのですが、ご確認をお願いいたします。
# spok 2008年06月26日(木) 深夜2時00分
sandmanさん
ご面倒をおかけします。
こちらでは再現しませんので、下記の情報をお教え下さい。
■PHPのバージョン
■Qdmailバージョン
■OS & バージョン
■該当部分のソースコード(メールアドレスなどは差し支えないものに差し替えて下さい。)
ここからは現時点での想像ですが、上記のエラーがでるということは、CakePHP1.2RC1 → Qdmailコンポーネント へ Controllerインスタンスが、引き継がれていないということかと思います。
Qdmail側のfunction startup(&$controller)は、こちらのCakePHP1.2RC1環境で正しく動作しましたので、sandmanさんの環境で、Qdmail以前の部分で、正しくContollerインスタンスが生成されているか(cake1.2rc1のcake/dispatcher.phpの515行目付近$controller =& new $ctrlClass();が実行されているかどうか)、または、
var $components=array( "Qdmail" );
の宣言が正しくなされているかをご確認いただければ幸いです。
参考:http://hal456.net/qdmail/cakebase
ひょっとしたら、何らかの設定で、componentのstartupを実行しないようなかたちになっているのかもしれませんので、下記も試してみていただければ幸いです。
qdmailの function startup を検索し(3000行目付近)、そのfunction のreturn直前に
pr($this->Controller);
を入れてみて実行して、何か表示されるかどうか。
# sandman 2008年06月27日(金) 午後4時08分
spokさん
素早くて丁寧なお返事ありがとうございます。
下記のサーバでエラーが出ました。
■PHPのバージョン
サーバ1:4.4.7 & 5.2.4
サーバ2:4.3.9
■Qdmailバージョン
0.8.8a
■OS & バージョン
サーバ1:XAMPP 0.3 Apache/2.2.6
サーバ2:CentOS 4.5.2 Apache/2.0.52
■該当部分のソースコード
function testmail(){
$subject = "これはテストです";
$to = array('info@sandman.jp', 'Sandman');
$body = "テストの本文です。";
$this->_sendMail($subject, $to, $body);
}
function _sendMail($subject, $to, $body) {
$this->Qdmail->to($to[0], $to[1]);
$this->Qdmail->bcc('info@bbb.com');
$this->Qdmail->subject($subject);
$this->Qdmail->replyto('info@aaa.com');
$this->Qdmail->from('info@aaa.com', 'MyName');
$this->Qdmail -> cakeHtml($body);
$this->Qdmail->send();
}
■エラー内容
Notice (8): Undefined property: Controller [APP/controllers/components/qdmail.php, line 3073]
Notice (8): Undefined property: Controller [APP/controllers/components/qdmail.php, line 3079]
Fatal error: Cannot instantiate non-existent class: in /Applications/xampp/xamppfiles/htdocs/cake7125/nk/controllers/components/qdmail.php on line 3079
------------------------------
$componentsの宣言もしてありますし、cake/dispatcher.phpでコントローラーは生成されていました。
qdmail.php の function startupでもpr($this->Controller) のダンプは表示されます。
よろしくお願いいたします。
# spok 2008年06月27日(金) 午後5時46分
sandmanさん
お手数をおかけします。。。。
>pr($this->Controller) のダンプは表示されます。
であるのに、上記のUndefined propertyエラーがでるのが、う~ん、なぜなんでしょう。。。。
startupで存在した$this->Controllerが、同じインスタンス内のrenderメソッド内では、消えている、ということに。。。。。
$this->Qdmail->to($to[0], $to[1]);
の「直前」に
pr($this->Qdmail->Controller);
を挿入したら、エラーになりますでしょうか?
全く関係ないかも知れませんが
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=809&forum=8
によると
$uses = array();ではなく$uses = null;の時に“undefined property”エラーがでることがあるようですが、もし、$uses = nullとなっていたら、$uses = array();としてみてください。
(たぶん関係ないと思うけど)。
# 赤石 2008年06月27日(金) 午後7時27分
sandmanさん
spokは自分のブログに技術的記事を無断転載しまくるので気をつけて下さい
# sandman 2008年06月27日(金) 午後10時32分
spok さん
こんばんは。お世話になってます。
> $this->Qdmail->to($to[0], $to[1]);
> の「直前」に
> pr($this->Qdmail->Controller);
> を挿入したら、エラーになりますでしょうか?
やはり、エラーが表示されます。
こちらでも色々な箇所を検証しまくってみましたが、結局わかりませんでした。
が、RC2が出てたので、こちらに差し替えたら、さくっと動きました。
何だったんでしょうか…
長々とおつきあいいただき、ありがとうございました。
これから、ありがたく使わせて頂きます。
あと、リクエストですが、Return-Path とかも設定できると嬉しいです。
取り急ぎ、勝手につけちゃいましたが(もちろん、エラー解消後です)。
よろしくお願いいたします。
> 赤石さん
ご助言ありがとうございます。
とは言え、自分はそういうの全然気にしませんし興味もありませんので、別にいっかーとかそんな感じです。
# spok 2008年06月28日(土) 午後3時44分
sandmanさん
解決してよかったです。原因はわかりませんが。。。。
なお、Return-Path ですが、現在、$mail->addHeader()メソッドには、バグあり、うまく動作していません。
早いうちに対処しますので、今しばらくお待ち下さい。
# spok 2008年06月28日(土) 午後4時17分
$mail->addHeader()のバグを修正しました。0.8.9a以降へのアップグレードをお願いいたします。