プロフィール&連絡先

2008/05/16 プロフィール spok
管理人:スポック(spok)

プログラミング関係サイト:CPA-LABテクニカル
メインサイト:CPA-LAB公認会計士試験合格体験記集
その他:日本語多機能PHPメーラーQdmail


管理人へのメール


spok アットマーク bg.mbn.or.jp

一日に100通以上のspamメールを受け取っています。
連絡を取りたい方は、必ずsubjectに Qdmail と入れて下さい。

SMTP送信する

2008/05/01 未分類 spok

PHPメール送信には主に3通り

PHPでメール送信する場合には、いくつかの方法があります。
  1. PHPのmail関数
  2. PHP設置サーバーのsendmailを直接操作
  3. 他のSMTPサーバーから送信
どちらにせよ、最終的にすべてsendemail*1がかかわります。SMTPサーバーの正体は、他のサーバーで動くsendemailだったりするわけですから。

で、オールマイティなのは、SMTP送信です。
RFCで規格が定められており、例えメールサーバーがsendmailでなくても、規格通りに通信ができます。
離れた別のSMTPサーバーを使えるので、PHPのmail関数やPHP設置サーバーにsendmailがなくても、メールを送信することができます。
SMTPサーバーは、例えば、自分が使用しているプロバイダの送信サーバーも使えるし、他に借りているレンタルサーバー、もちろん自前設置の送信サーバも使えます。
ウィンドウズ(windows)環境で、メール送信サーバーを設置するのが面倒な場合などは、お手軽にSMTP送信できるQdmailは役に立つはずです。

*1 : または、qmailやPostfixなどの送信サーバ。しかしそれはsendmailほぼ互換なので、ここでは同一視する。

QdmailをSMTP通信で利用するには

簡単高機能SMTPメール送信ライブラリ-Qdsmtpを使います。
使い方はいたって簡単です。
下記にサンプルコードも記載しますが、QdsmtpのQdmailと組み合わせて使うには、もご参照ください。
追記:さらにディープにSMTP連携について知りたい場合は、SMTP玄人的連携法をご参照下さい。

サンプルコード

関数型のサンプルは、qd_send_mailでSMTP送信をご参照下さい。
SMTP認証の場合
require_once('qdmail.php');

$mail = & new Qdmail();

$mail -> smtp(true);

$param = array(
    'host'=>'smtp.example.com',//メールサーバー
    'port'=> 587 , //これはSMTPAuthの例。認証が必要ないなら 25 でOK。
    'from'=>'from@example.com', // Return-path: になります。
    'protocol'=>'SMTP_AUTH',// 認証が必要ないなら、'SMTP'
    'user'=>'user_id@example.com', //SMTPサーバーのユーザーID
    'pass' => 'sasuga99', //SMTPサーバーの認証パスワード
);
$mail -> smtpServer($param);

$message="メールの中身をここに書きます。";

$mail ->to('toaddress@example.com','スポック宛');
$mail ->subject('メールのテスト');
$mail ->from('from@example.com');
$mail ->text($message);
$return_flag = $mail ->send();
ポイント、 Qdsmtpをインクルードする必要はありません。include_pathに含まれた場所にqdsmtp.phpが置いてあれば、Qdmailが勝手にインクルードします。
もし、自動インクルードがうまくいかないようだったら、ユーザー側でインクルードしてみてください。

インクルードされていれば、QdSmtpを new する必要はありません。Qdmailが自動で、QdSmtpのインスタンスを作成します。

SMTP AUTH以外のノーマルSMTP,POP BEFORE SMTPをお使いの場合は、下記をご参照ください。
QdSMTP初期設定
SMTPパラメータのfromは、Return-path:ヘッダとなり、$mail->form(...)の方は、From:ヘッダとなります。ご留意ください。

使い方 CakePHPでのメール送信

2008/04/24 未分類 spok
QdmailはCakePHPのコンポーネントとしても動作します(バージョン0.7.6.a以降)。
自分自身で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変数として使用可能
cakeview.jpg

エレメントとレイアウトのディレクトリ

エレメントの既定のディレクトリ
app/views/elements/email/text/
app/views/elements/email/html/
レイアウトの既定のディレクトリ
app/views/layouts/email/text/
app/views/layouts/email/html/