▼ 使い方 CakePHPでのメール送信
QdmailはCakePHPのコンポーネントとしても動作します(バージョン0.7.6.a以降)。
自分自身でCakePHP内から呼ばれているのか、通常のPHPアプリケーションから呼ばれているのか判別しますので、ユーザーはファイルを使い分けたりする必要はありません。
自分自身でCakePHP内から呼ばれているのか、通常のPHPアプリケーションから呼ばれているのか判別しますので、ユーザーはファイルを使い分けたりする必要はありません。
2008-10-01追記
下記、サイトにてスマートなCakePHPでのQdmailの使い方を紹介していただいております。ぜひご参照下さい。
cakePHP メール送信はもうこれでいいでしょ -LoveIT - 安江ブログ
■使い方(初期設定)
通常のCakePHPコンポーネントと同じです。次のディレクトリに qdmail.php ファイルをコピーしてください。
app/controllers/components/使用したいコントローラーで、以下のプロパティの宣言を行ってください。
var $components=array( "Qdmail" );
具体的なメール送信の方法
コントローラーのアクションで、次のように記述します。$this->Qdmail->to( 'address@example.com' , '日本語名' ); $this->Qdmail->subject('Qdmail on CakePHP メールのテスト'); $this->Qdmail->from('from@example.com' , '配信元日本語名' ); $this->Qdmail -> text( '本文をここにかきます' ); $this->Qdmail -> send();宛先などの指定は、Qdmail通常の使い方と同じです。
通常の使い方で例として挙げている「$mail->」を「$this->Qdmail」と置き換えて読んでくだ
さい。
CakePHPをお使いの方であれば、easyよりも、通常のオブジェクト指向型でパラメータを指定したほうがやりやすいと思います。
CakePHPのビューを使用する方法
CakePHP用に、2つの特別なメソッドを用意しました。$this->Qdmail -> cakeText( '本文(テキスト)' ); or $this->Qdmail -> cakeHtml( '本文(HTML)' );見て直感的におわかりのように、通常のテキストの場合は、cakeText,HTMLメールの場合は、cakeHtmlメソッドを使います。
ビューの指定の方法
textもhtmlも同じ書式なので、textをもとに説明します。$this->Qdmail -> cakeText( '本文' ,'エレメント名','レイアウト名');フルスペック
cakeText( $content , $template , $layout , $org_charset , $target_charset, $enc , $wordwrap_length ) 第1引数から、本文、テンプレート名、レイアウト名、テンプレートの文字コード(省略可、またはnull),送信時の文字コード(省略可、またはnull)、本文のエンコード形式(7bit,base64等)、ワードラップの文字数(マルチバイト換算)※エレメント名とレイアウト名は省略可能です。その場合は「default」を指定したことになります。
上記のように書くと次のような感じになります。
'本文' | エレメントの中で、 $content変数として使用可能 |
エレメントからの出力 | レイアウトの中で、 $content_for_layout変数として使用可能 |

エレメントとレイアウトのディレクトリ
エレメントの既定のディレクトリ
app/views/elements/email/text/ app/views/elements/email/html/
レイアウトの既定のディレクトリ
app/views/layouts/email/text/ app/views/layouts/email/html/
- TB-URL http://hal456.net/qdmail/023/tb/
# spok 2009年01月29日(木) 午前7時37分
CakePHPはShellの場合、コンポーネントを使えないと認識しております。
他のコンポーネントは使えますか?
参考:http://d.cialla.net/diki.cgi/develop/php/cakephp/shell/qdmail
# にょろ 2009年01月29日(木) 午前10時54分
申し訳ありません、すばやい御返答ありがとうございました。
えぇぇぇ゛~~(゜-゜)
そ・・・そうだったのですか・・・(´Д⊂
他のコンポーネントは使っていないので・・・・。
参考HPをみて格闘してみます!
ありがとうございました
# coco 2009年02月15日(日) 深夜2時54分
CakePHPのコンポーネントとして利用させてもらっています。
HTMLメールを試してみようと思い、
$this->Qdmail->html('<html><body><a href="http://www.yahoo.co.jp/">test</a></body></html>');
としてsendしてみたのですが、
メールソフトで開くと、HTMLとして動作してくれません。
何か間違っているのでしょうか?
メールソフトはMozilla Thunderbirdです。
よろしくお願いします。
# tomotomo 2009年08月03日(月) 午前9時42分
大変便利で重宝しています。ありがとうございます。
一点、気になったことがあったのでコメントさせていただきます。
$this->Qdmail->to('宛先1');
$this->Qdmail->cakeText('本文');
$this->Qdmail->send();
とした後、別の宛先へHTMLメールを送信しようと試みました。
$this->Qdmail->to('宛先2');
$this->Qdmail->cakeHtml('HTML本文');
$this->Qdmail->send();
しかし、宛先2に届いたメールを確認すると、テキストメールが届いておりました。
cakeHtmlメソッドを実行する前に、
$this->Qdmail->content['TEXT'] = "";
として、強引にテキストを空っぽにしたらHTMLメールで届きました。
恐らく私の使い方は大いに間違っていると思いますが、何らかの対処法があるのでしょうか。
# junsei 2009年08月07日(金) 午前11時41分
Coolなライブラリありがとうございます!
CakePHPのコンポーネントとして使わせて頂いてます。
cakeText(cakeHtml)メソッドの第一引数ですが、配列に対応すればより便利かと。。
3824行目付近:
if( is_array( $content ) ){
$content = $view->renderElement( $this->view_dir . DS . $type . DS . $this->template , $content, true );
}else{
$content = $view->renderElement( $this->view_dir . DS . $type . DS . $this->template , array('content' => $content ) , true );
}
# アルガー 2010年12月06日(月) 午後1時14分
cakeTextでViewを指定する際、renderElementメソッドがないといわれますが、
CakePHP1.3からrenderElement→elementになったので、変更して動かしていますので、こちらにご連絡しておきますね。
# coban 2011年01月31日(月) 深夜0時44分
> tomotomoさん
僕も同じ現象です。
$this->Qdmail->content['TEXT'] = "";
にすればHTMLが送信されるというところまで。
もし解決方法をご存知でしたら、お知らせください。
宜しくお願いします。
# sai 2012年04月20日(金) 午後3時19分
コンポーネントとして活用させていただいております。
cakephpにてqdmailをコンポーネントとして使用しているのですが、下記の $this->Qdmail->to($datas["Profile"]["mail"]);のように、データベースからメールアドレスを取得して送ろうとすると送れません。
$this->Qdmail->to('sample@sample.com')のようにするとちゃんと送れます。
データベースから取得したメールアドレスでの送り方をぜひ教えていただけたらと思います。
よろしくお願い致します。
function receiving($id = null) {
$this->Profile->id = $id;
$datas = $this->Profile->findById($id);
$this->Qdmail->smtp(true);
$this->Qdmail->smtpServer($this->mail_param);
$this->Qdmail->to($datas["Profile"]["mail"]);
$this->Qdmail->subject($subject);
$this->Qdmail->from('sample@sample.com' , 'サンプル' );
$this->Qdmail ->text($content);
$this->Qdmail -> send();