ダウンロード

2008/05/12 未分類 spok

version

アルファー版ですが、それなりに使えるかと思っています。
ご意見、ご不満、動作報告などしていたけると励みになります。

ファイルの置き場所

includeできる場所であれば、どこでも構いません。
ファイル1つ構成ですので、バージョンアップも上書きするだけです。

最新版

2008-09-15 0.1.4.alpha.zip

更新履歴
以前のバージョン
2008-09-14 0.1.3.alpha.zip
2008-09-11 0.1.2.alpha.zip
2008-06-01 0.1.1.alpha.zip
2008-05-17 0.1.0.alpha.zip

ライセンス(License)

このPHPプログラム Qdmail はオープンソースであり、The MIT Licenseでライセンスされています。
The MIT License http://www.opensource.org/licenses/mit-license.php
改変、再配布、商用利用は自由に行えます。ライセンスに基づく限り、無料であり、貴方はどこにもお金を支払う必要はありません*1
詳しくは、上記URLをご覧下さい。
(以前はもっと制約の多いAGPLv3でしたが、より緩いMIT Liceseに変更しました。)

このライセンスに守るのが難しい方は、作者に連絡をとってください。
連絡先は、このサイトのサイドバーにメールアドレスに記載してあります。私は多くのスパムメールを受け取っているので、必ず、E-mailの"subject"には"Qdmail"の言葉を入れて下さい。

作者は、操作に関する質問はメールでは受け付けていません。質問のある方はこのサイトの適当な記事にコメントをつけることで行って下さい。ただし、作者の都合により、その質問には回答が寄せられないことがあります。

*1 : くれるというならいただきます

メール番号とUID番号

2008/05/12 未分類 spok
POPプロトコルでは、メールを特定するのに、2つの番号があります。
名称特徴QdmailReceiverでの別名
メール番号POPセッション毎に1から付け直しpointer番号
UID番号POPサーバー内では一意に保たれる(セッション超えてOK)popuid
UID番号の方が一意に保たれるので、たいへん便利なのです。しかし、POPでは、受信サーバーに溜まっているメールを特定するのには、メール番号を使うことになっています。

したがって、UIDとメール番号の変換を行うには、以下のコマンドを使用してください。

サンプルコード

2008/05/08 未分類 spok
受信サーバーに溜まっている件名をすべて表示する。
 $server = array(
    'protocol'=>'pop3',
    'host'=>'pop.example.com',
    'user'=>'userID',
    'pass'=>'password',
 );

qd_receive_mail( 'start' , $server ); 
$max = qd_receive_mail( 'count' );
echo "<pre>";
for($i = 1 ; $i <= $max ; $i++){
    echo 'Mail Number: '.qd_receive_mail( 'pointer' ).' subject: ';
    echo qd_receive_mail( 'header' , array('subject','name') );
    echo "\r\n";
    qd_receive_mail( 'next' );
}
echo "</pre>";
die();
本文を取得するつもりがないのであれば、ヘッダのみ取得するようにするには次の文を'start'の次に挿入します。これで本文を受信サーバーから取得しないので若干高速になります。
qd_receive_mail( 'popHigh' , 0 ); 

タイトルに「未承諾広告」があるメールをサーバーから削除する

qd_receive_mail( 'start' , $server ); 
qd_receive_mail( 'popHigh' , 0 ); 
$max = qd_receive_mail( 'count' );
$target = array();
for($i = 1 ; $i <= $max ; $i++){
    $subject = qd_receive_mail( 'header' , array('subject','name') );
    if( false !== mb_strpos( $subject , '未承諾広告' ) ){
        $target[] = qd_receive_mail( 'pointer' );
    }
    qd_receive_mail( 'next' );
}
foreach( $target as $del_id ){
    qd_receive_mail( 'delete' , $del_id );
}
    qd_receive_mail( 'done' );
この例では、いったん$target変数に、該当のメール番号を溜めて、後でまとめて削除しています。
このようにしなくても、最初のif文の部分で、deleteしても大丈夫ですが、必ず最後にdoneコマンドを実行することを忘れないようにしてください。

基本タイプ(OOPタイプ)

2008/05/08 未分類 spok

メールヘッダーの取得

メール差出人の名前部分
$receiver には、初期設定またはPOPモード初期設定にて設定した、QdmailReceiverオブジェクトが入っているものとします。
$receiver->header( array( 'from' , 'name' ) );
メール差出人のメールアドレス
$receiver->header( array('from','mail') );
メール差出人関係の情報を一括取得
$receiver->header( array('from') ) ;
または
$receiver->header( 'from' );
でも可能
配列形式で、fromヘッダーから解析された情報が返されます。

他のヘッダーについても、同様に取り出すことができます。
  • 注意点!
    メールヘッダーの「名称」は、すべて「小文字」で指定してください。
    Subjectは×。subjectは○です。
    
メール件名
$receiver->header( array('subject','name') );
メール件名関係の情報を一括取得
$receiver->header( array('subject') );
または
$receiver->header( 'subject' );
でも可能
ヘッダー情報を全部配列で取得
$receiver->header( 'ALL' );

メール本文の取得

$receiver->bodyAutoSelect();
これで、htmlメールの場合は、html部分を取得し、テキストメールの場合は、テキスト部分を取得します。
テキスト部分は以下の形でも取得できます。
$receiver->text();
この形式は、テキスト部分を取得します。htmlメールであっても、代替テキストを取得します。
代替テキストがないhtmlメールの場合は、nullとなります。

html部分の取得。
$receiver->html();
テキストメールの場合は、nullとなります。
一般的には'bodyAutoSelect'コマンドを使用したほうがいいでしょう。

添付ファイルの取得

$attach = $receiver->attach();
以下の形で、添付ファイルの配列が$attachに格納されます。
(例)
array(
    0 => array(
         'value' => '添付ファイルの中身(デコード済みのバイナリ)',
         'finename' => 'ファイル名(日本語デコード済み)',
         'finename_safe' => 'urlencode済みのファイル名',
         'content-type' => 'image/jpg',
         'enc' => 'base64',
        ),
    1 => array(
         'value' => '添付ファイルの中身(デコード済みのバイナリ)',
         'finename' => 'ファイル名(日本語デコード済み)',
         'finename_safe' => 'urlencode済みのファイル名',
         'content-type' => 'image/jpg',
         'enc' => 'base64',
         'content-id' => '........',
    ),
);
'finename'は、マルチバイト(日本語)のファイル名にデコード済みですので、そのままwindowsなどで、そのファイル名で保存しようとすると不都合がでる場合もあります。その場合は、ご自分でsjisにエンコードしてからお使いください。
(もちろん、元のファイル名がアルファベットファイル名であれば、特段の問題はでないと思います。)
'finename_safe'は、ファイル名をurlencodeしていますので、このままファイル名として保存しても、大丈夫なようにしています(windows,unix,linux)。

添付ファイルを保存するサンプルコード
$attach = $receiver->attach();
foreach($attach as $att){
    $fp=fopen($att['filename_safe'],'w');
    fputs($fp,$att['value']);
    fclose($fp);
}