メッセージ欄
分類 【未分類】 で検索
▼ 出力文字コード
QdmailReceiverは、返り値のマルチバイトコードについては、mb_internal_encoding()に指定された文字コードに変換して返します。
したがって、適切にmb_internal_encoding()の文字コードの設定がなされていなければなりません。
特に、返り値の文字コードを別に指定したい場合は、charset()メソッドを使用してください。
したがって、適切にmb_internal_encoding()の文字コードの設定がなされていなければなりません。
特に、返り値の文字コードを別に指定したい場合は、charset()メソッドを使用してください。
carset() 返り値の文字コード指定 OOP型
$receiver->carset( 'EUC-JP' );
▼ QdmailReceiverとは
■QdmailReceiverでできること
- メールデコード(日本語OK)
- 受信サーバー(POP)操作
Pear::Mail,Pear:MIMEなどで同様の機能は実現できますが、メールの仕組みを理解していないと難しいです。Qdmailシリーズは、「初心者には簡単に、上級者には詳細に」のポリシーのもと、簡単使用方法と、詳細使用方法の両方を使うことができます。
簡単にメールのデコードができるので、例えば、取得したメールをヘッダーと本文まるごとデータベースに保存しても、すぐに内容を取り出すことができます。
gmailのようなWEBサービスも比較的簡単に実現できるでしょう。
更新情報
■QdmailReceiverの特徴
- 統合部分
- 簡単関数タイプを用意
- ファイル一つで、STDIN , POP , 直接デコードの3つの機能を統合して使用可能
- デコード部分
- 日本語メールのデコード
- POP機能部分
- メールの取得、削除
- ヘッダーのみ取得する高速モードあり
- 特定ヘッダーのみの抜き出し機能
- UID取得機能
■3つのモード
スタンダードインプットモード(STDIN)
メールの受信サーバーから、パイプライン処理等で、PHPプログラムを直接起動し、STDIN経由でメールデータを受け渡しするモードです。受信サーバーの種類によって設定が異なります。
以下のような用途に使えるでしょう。
- 空メール
- spam排除サービス
- 転送メール
- WEBメールサービス
- メールによる各種メンバーサービス
POPモード
メールの受信サーバーにPOPプロトコルで接続し、溜まっているメールを取得します。以下のような用途に使えるでしょう。
- WEBメールサービス
- spam排除サービス
- STDINモードが使えない場合の代替手段
ダイレクトモード
メールデータ(ヘッダーも含めた全部)を渡すことで、ヘッダー部分を分割し、解析します。日本語も大丈夫です。以下のような用途に使えるでしょう。
- 複雑なメール転送
- 他のソフトと組み合わせて、メールのデコード
▼ POP特有の処理(OOPタイプ)
初期設定は必ず行ってください。
OOPでいける方はそれなりにPHPに習熟した方と思いますので、例題の解説として進めます。
$receiver には、初期化されたQdmailReceiverオブジェクトが代入されているものとします。
ご自分の(安全な)受信サーバー(POPサーバー)を初期設定し以下を実行してみてください。
当然ですが、POPサーバーにメールが残っていなければなりません。テストする場合はあまりたくさんのメールが残っていると時間がかかりますので、数通にしておきましょう。
順番に解説していきます。
未読・既読の管理はPOPの機能ではできません(そもそもPOPプロトコルは未読・既読を行いません)
この順番(pointer)はセッション毎(プロセス毎)に変わります。これをプロセスを超えて共有して使用すると意図しない結果となる場合がありますので、注意してください。
プロセスを超えて、メールを特定したい場合は、POP-UID機能を使ってください。
一般的には
どのような配列で内部格納されているか知りたい方は、上記のコードを以下に修正して、表示させてみてください。
同様にして、
OOPでいける方はそれなりにPHPに習熟した方と思いますので、例題の解説として進めます。
$receiver には、初期化されたQdmailReceiverオブジェクトが代入されているものとします。
ご自分の(安全な)受信サーバー(POPサーバー)を初期設定し以下を実行してみてください。
当然ですが、POPサーバーにメールが残っていなければなりません。テストする場合はあまりたくさんのメールが残っていると時間がかかりますので、数通にしておきましょう。
echo "<pre>";
for($i = 1 ; $i <= $receiver->count() ; $i++){
echo "Mail number: ".$receiver->pointer()."\r\n";
echo htmlspecialchars(
print_r(
$receiver->header( array('subject','name') , 'none' )
,true)
,ENT_NOQUOTES);
echo "\r\n";
$receiver->next();
}
echo "</pre>";
メール件名一覧が表示されましたか?順番に解説していきます。
$receiver->count()で、POPサーバーに残っているメールの件数を取得します。
未読・既読の管理はPOPの機能ではできません(そもそもPOPプロトコルは未読・既読を行いません)
$receiver->pointer()現在、どの順番のメールを読んでいるかを取得します。
この順番(pointer)はセッション毎(プロセス毎)に変わります。これをプロセスを超えて共有して使用すると意図しない結果となる場合がありますので、注意してください。
プロセスを超えて、メールを特定したい場合は、POP-UID機能を使ってください。
$receiver->header( array('subject','name') , 'none' )
いよいよ本題です。これで、件名を取得しています。一般的には
$receiver->header( 取得するヘッダー名 , 存在しない場合の返り値(省略可) )と書きます。
どのような配列で内部格納されているか知りたい方は、上記のコードを以下に修正して、表示させてみてください。
$receiver->header( 'subject' , 'none' )
これで、subjectに関するデコードデータを配列の形で入手することができます。同様にして、
$receiver->header( 'from' , 'none' )
$receiver->header( array('from',0,'name') , 'none' )
なども試してみましょう。注意! ヘッダー名は、すべて小文字で指定してください。ループの最後はカレントポインタの移動です。
$receiver->next();これで、次のメールへと処理をうつします。現在のメール情報は消去されます。(QdmaiReceiverの内部的に消去されるだけであって、POPサーバーからは削除されません)
▼ POP特有の処理(一般関数タイプ)
POP初期化の処理を前提とします。初期化(サーバー情報の設定)を行わないと、POPでメールを受信サーバーから取得することはできません。
今後、受信サーバーのことをPOPサーバーと記載します(この場合は同じものを示しています)。
それ以降のメールの処理をするには、次のようにします。
今後、受信サーバーのことをPOPサーバーと記載します(この場合は同じものを示しています)。
メール件数の取得
echo qd_receive_mail( 'count' );これで、POPサーバーに溜まっているメールの件数を取得します。
次のメールを処理する
何も指定しなければ、受信サーバーに溜まった最初のメールだけを処理します。それ以降のメールの処理をするには、次のようにします。
qd_receive_mail( 'next' );
▼ Directモード
Directモードは、引数にメール全文を与えることで、そのメールを解析するモードです。
一番ベーシックな働きをします。
POPモードやSTDINモードも、このDirectモードを呼び出して使っています。
SMTPに準拠した形式を受け付けます。
一番ベーシックな働きをします。
POPモードやSTDINモードも、このDirectモードを呼び出して使っています。
使い方(一般関数タイプ)
qd_receive_mail( 'direct' , 'メールデータ全文' );メールデータ全文は、本文だけなく、ヘッダーも含めた全文である必要があります。
SMTPに準拠した形式を受け付けます。
使い方(OOPタイプ)
QdmailReceiver::start( 'direct' , 'メールデータ全文' );あとは共通の使い方と同じです。
# test 『一番下「charset」メソッドのつづりが間違ってるお・・』 (2009/11/09 16:03)