SMTPの玄人的操作法
2008/07/19
QdSmtpをQdmailから操作する。
QdSMTPを利用して、Qdmailからメールを送る基本的な方法は、QdSmtpでのSMTP送信をご覧ください。ここでは、メールを送るだけではなくて、QdSmtpの機能をフル活用したいという人のためのコーナーです。
QdSmtpオブジェクトの取得方法
Qdmail&QdSmtpで、SMTP送信する場合は、インクルードできる場所にqdsmtp.phpファイルさえ置いてあれば、Qdmail側で勝手にインクルードして、勝手にオブジェクト生成(インスタンス)を行います。これはこれで便利だと思うのですが、QdSmtpオブジェクトは、Qdmailによって隠蔽されているので、QdSmtpの機能を余すことなく利用するのが若干難しくなります。
Qdmailでは、SMTPオブジェクトの明示的取り扱いについて、以下の2つの方法があります。
(※ ここではあくまでもQdSmtpオブジェクト(インスタンス)を明示的に扱いたい場合であって、簡単にsmtp送信するだけならQdSmtpでのSMTP送信の方法の方が簡単かと思います。)
- Qdmailが内部生成したQdSmtpインスタンスをユーザーに渡す。
- QdSmtpインスタンスをユーザー側でnewし、それをQdmailに渡す。
まず、1の方法を説明します。
(ここではPOP BEFORE関連のみを記しますが、他のQdSmtpメソッドに応用可能です。)
1. Qdmailが内部生成したQdSmtpインスタンスをユーザーに渡す。
サンプルコード
必ずバージョン0.9.0a以降でご使用ください。$param = array( 'host'=>'smtp.example.com', 'pop_host'=>'pop.example.com', 'port'=> 25 , 'from'=>'from@example.com', 'protocol'=>'POP_BEFORE', 'pop_user'=>'pop_user_id', 'pop_pass' => 'pop_password', ); $mail -> smtp(true); $mail -> smtpServer($param); $smtp=& $mail->smtpObject(); // QdSmtpのオブジェクトを取得 $smtp -> pop3TimeFilename( 'henkou_filename.txt' ); // POP制御のためのファイル名変更 $smtp -> pop3ValidMinute( 5 ); // POP間隔の変更 $message=$itsme.$sender_mess."ここに本文を書きます。"; $flag=$mail ->easyText('address@example.com','宛先','タイトル',$message,'from@example.com');(PHP5の場合は、& は必要ありません。)
これで、$smtpには、Qdsmtpのオブジェクト(インスタンス)が代入されておりますので、Qdsmtpのメソッドを使用することができます。
この
$smtp=& $mail->smtpObject(); // QdSmtpのオブジェクトを取得 $smtp -> pop3TimeFilename( 'henkou_filename.txt' ); // POP制御のためのファイル名変更 $smtp -> pop3ValidMinute( 5 ); // POP間隔の変更の部分が、QdSmtpを操作している部分ですが、PHP5の場合は、わざわざ、$smtpという変数にいったん代入しなくても、以下のようにすることもできます。
$smtp -> $mail->smtpObject() -> pop3TimeFilename( 'henkou_filename.txt' ); $smtp -> $mail->smtpObject() -> pop3ValidMinute( 5 );続いて、2の方法を説明します。
2. QdSmtpインスタンスをユーザー側でnewし、それをQdmailに渡す。
require_once('qdmail.php'); $message='<font color="red">メールの中身を書きます。</font>'; $mail ->to('address@example.com'); $mail ->subject('メールのテスト'); $mail ->from('from@example.com'); $mail ->html($message); //ここまでは通常のQdmailの操作 //ここからQdSmtpの操作 require_once('qdsmtp.php'); $smtp = & new qdsmtp; $param = array( 'host'=>'smtp.example.com', 'pop_host'=>'pop.example.com', 'port'=> 25 , 'from'=>'from@example.com', 'protocol'=>'POP_BEFORE', 'pop_user'=>'pop_user_id', 'pop_pass' => 'pop_password', ); $smtp -> server($param); $smtp -> pop3TimeFilename( 'henkou_pop_file.txt' ); $smtp -> pop3ValidMinute( 5 ); $mail->setSmtpObject($smtp);//QdmailにQdSmtpのインスタンスを渡す $flag=$mail ->send();なお、
$mail->setSmtpObject($smtp);//QdmailにQdSmtpのインスタンスを渡す $flag=$mail ->send();の部分は、PHP5であれば、以下のように書くこともできます。
$flag=$mail -> send($smtp);このsend($smtp)式は、PHP4でも送信できますが、$smtpインスタンスがディープコピー(clone copy)されるので、若干メモリの無駄使いとなります。