2010-11-18 14 views
0

私はIMAPでPHPを使用しています。私はフォルダから20の最も新しい電子メールを取得する必要があります。私はユーザーが日付で並べ替えるためにimap_sortを実行しますが、問題は、700以上の電子メールを持つ大きなフォルダでは年齢がかかることです。imap_sort結果の数を制限しますか?

PHP IMAPを使用してメッセージを日付順にソートし、最新の20個のメールのみを送信する方法はありますか?

多分imap_searchを使用しますか?

$start_from = params::cleanDefault($_GET, 'start_from', 0); 
$limit  = params::cleanDefault($_GET, 'limit', 20); 
$sort_by  = params::cleanDefault($_GET, 'sort_by', 'SORTARRIVAL'); 

$emails = imap_sort($mbox, $sort_by, 1, SE_NOPREFETCH); 
$emails = array_slice($emails, $start_from, $limit); 

ありがとう:

は、ここに私のコードです。

答えて

1

簡単な方法はありません。

PHPのimap_*関数の基礎となるcクライアントライブラリによってフェッチされるデータをsorting on SORTARRIVAL instead of SORTDATEで最小化しています。また、an IMAP extensionがあり、発信者がSORTの結果のサブセット(たとえば最初の20ヒット)を要求できるようになっていますが、ごくわずかなIMAPサーバしかサポートしていないため、PHPはそれを利用できません。

imap_searchを試して、1日前から届いたメッセージを尋ねることができます。十分なヒットでない場合は、2日前から到着したメッセージを再検索できます。等々。しかし、これはコードに乱雑になる可能性があり、それはあなたがすでにやっているものより速く終わることはありません。

関連する問題