ようこそゲストさん

QdmailReceiver Multibyte mail decoder & POP Client

POP特有の処理(OOPタイプ)

初期設定は必ず行ってください。

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サーバーからは削除されません)

# [質問]non-objectエラー 2011年01月31日(月) 午後3時19分

基本的な質問で失礼します。
上記参考にPHPスクリプト作ってみましたが、以下エラーとなってしまいます。
Fatal error: Call to a member function count() on a non-object

QdmailReceiver単体以外のライブラリ等が必要なのでしょうか?
PHPソースは以下の通りです。
----------------------
<?php

require_once('qdmail_receiver.php');
$popserver = array(
‘protocol’=>’pop3′,
‘host’=>’pop.mail.yahoo.co.jp’,
‘user’=>’xxxxxxx’,
‘pass’=>’xxxxxxx’,
);

$receiver = QdmailReceiver::start(‘pop’, $popserver,'UTF-8');

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>";
?>


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail_rec/027/tb/