我有從腳本中獲取郵件的PHP腳本。我使用imap_search函數: $emails = imap_search($mbox, 'UNSEEN');
imap_search限制返回消息的數量
有沒有辦法限制返回的消息數量。現在在巨大的郵箱我得到像5000條消息。我只想要按日期排序的前20名。
有沒有辦法做到這一點?
謝謝。
我有從腳本中獲取郵件的PHP腳本。我使用imap_search函數: $emails = imap_search($mbox, 'UNSEEN');
imap_search限制返回消息的數量
有沒有辦法限制返回的消息數量。現在在巨大的郵箱我得到像5000條消息。我只想要按日期排序的前20名。
有沒有辦法做到這一點?
謝謝。
的imap_search函數有一個條件屬性,你可以使用多種方式來限制消息:
ALL - 與\ Answered標記匹配消息 - 返回
回答準則其餘符合所有消息設置
BCC「串」 - 在密件抄送「串」匹配消息:場
之前的「日期」 - 與日期相符的消息:「日期」
BODY「字符串」之前 - 與「串」相匹配的消息正文消息
CC「string」 - 將消息與「string」匹配抄送:字段
DELETED - 匹配刪除的消息
FLAGGED - 匹配與\ FLAGGED消息(有時被稱爲重要或緊急的)標誌設置
FROM「字符串」 - 在從匹配消息以「串」:場
KEYWORD 「串」 - 比賽的消息與 「字符串」 作爲關鍵詞
NEW - 匹配新的消息
OLD - 匹配的舊消息
「日期」 - 與日期相符的消息:匹配 「日期」
近期 - 將消息與\ RECENT標誌集合匹配
SEEN - 匹配消息tha噸有被讀取(在\ SEEN標誌設置)
SINCE「日期」 - 與日期相符的消息:後「日期」
SUBJECT「串」 - 在主題爲「串」匹配消息:
TEXT「字符串「 - 匹配短信‘串’
爲‘字符串 - 字符串’相匹配的消息‘’在To: 解答 - 匹配沒有得到回答
未刪除的消息 - 未刪除
未標記匹配的消息 - 匹配未標記的郵件
UNKEYWORD「string」 - 匹配沒有關鍵字「string」的郵件
級UNSEEN - 還沒有被讀取尚未匹配的消息
imap_sort可以讓你既排序和過濾器在同一時間
但儘管如此,它不會允許限制的「前20名」就在函數調用。
讓這樣解決這個問題:
1.You可能會限制沒有結果的使用,因爲標準 2. Retreive最後幾個回短信E降低了數據不會返回。×15
$this->msgCounts = imap_search($imap_resource, 'SUBJECT "hello dolly" SINCE "8 April 2003"', SE_UID);
然後在這裏是中檢索的例子在過去的15返回,然後切換向前和向後查看更多結果或older.Note這裏假設你有一個向前按鈕和老年人是設置$ _GET變量。
$this->msgCounts = $messageCounts;
$multiarray=[];
\Session::put('totalmsg',$this->msgCounts); //Sav etotal no of message in folder to session to determine if to allow next or previous
if($this->msgCounts > 15) //MESSAGES IS MORE THAN WE NEED GET 20
{
$offcut = 15; //default offcut
/**
* Viewing previous or next messages
**/
if(isset($_GET['msgs']) && $_GET['msgs'] == 'older')
{
$this->msgCounts = \Cache::has('msgpointer') ? \Cache::get('msgpointer') : $this->msgCounts;
$msgOffset = $this->msgCounts - $offcut; //get +15 messages
if($offcut > $msgOffset) {
$msgOffset = $msgOffset + 5; //if less than 15 get 10
$offcut = 10;
}
if($offcut > $msgOffset) {
$msgOffset = $msgOffset + 5; //if less than 10 get 5
$offcut = 5;
}
if($offcut > $msgOffset) {
$msgOffset = $msgOffset + 3; //if less than 3 get 2
$offcut = 2;
}
if($offcut > $msgOffset) {
$msgOffset = $msgOffset + 2; //if less than 2 get 1
$offcut = 1;
}
\Cache::put('msgpointer',$msgOffset,60 * 60 * 24);
}
if(isset($_GET['msgs']) && $_GET['msgs'] == 'newest')
{
$this->msgCounts = \Cache::has('msgpointer') ? \Cache::get('msgpointer') : $this->msgCounts;
$msgOffset = $this->msgCounts + $offcut; //get +15 messages
if($msgOffset > $messageCounts) {
$msgOffset = $msgOffset - 5; //if not up to 15 get 10
$offcut = 10;
}
if($msgOffset > $messageCounts) {
$msgOffset = $msgOffset - 5; //if not up to 10 get 5
$offcut = 5;
}
if($msgOffset > $messageCounts) {
$msgOffset = $msgOffset - 3; //if not up to 5 get 2
$offcut = 2;
}
if($msgOffset > $messageCounts) {
$msgOffset = $msgOffset - 2; //if not up to 2 get 1
$offcut = 1;
}
\Cache::put('msgpointer',$msgOffset,60 * 60 * 24);
}
// LOOP THROUGH LAST 20 MESSAGES IF THERE MORE THAN 10 MESSAGES
for ($i = $this->msgCounts; $i > $this->msgCounts - $offcut; $i--)
{
$header = imap_header($this->conn,$i); //GET HEADER INFO USING IMAP FUNCTION
$uid = imap_uid($this->conn,$i); //GET UNIQUE MESSAGE ID FOR READING MESSAGE LATER
//SAVE ALL MESSAGE INFO IN ARRAY
$tobox = $header->reply_to[0]->mailbox ? $header->reply_to[0]->mailbox : 'noreply';
$tohost = $header->reply_to[0]->mailbox ? $header->reply_to[0]->host : 'email.com';
$toaddress = $tobox.'@'.$tohost;
$mailbox = isset($header->from[0]->mailbox) ? $header->from[0]->mailbox : 'no-reply';
$host = isset($header->from[0]->host) ? $header->from[0]->host : 'email.com';
$fromaddress = $mailbox.'@'.$host;
$array = ['toaddress' => isset($header->toaddress) ? $header->toaddress : isset($header->to) ? $header->to[0]->mailbox.'@'.$header->to[0]->host : $toaddress,'date' => isset($header->date) ? $header->date : date('Y-m-d'),'subject' => isset($header->subject) ? $header->subject : "no subject" ,'from' => isset($header->from[0]->personal) ? $header->from[0]->personal :$fromaddress,'unseen' => isset($header->Unseen) ? $header->Unseen : 'S', 'uid' => isset($uid) ? $uid : $i,'fromemail' => $fromaddress];
//PASS A MESSAGE INFO INTO A MULTI ARRAY
$multiarray[] = $array;
}
你可以設置它得到是前90天,然後如果其lot.return它由一塊像above.My道歉使用一些laravel輔助類有大塊,一切都好註釋掉的日期。 希望這可以幫助別人!
這將縮小搜索範圍,但會限制返回多少郵件? – 2010-02-01 14:33:42
@Anthony:據我所知,這是唯一可以縮小東西的方法。有一個嗎? – Sarfraz 2010-02-01 14:52:16
要縮小範圍,它是唯一的方法。但是他的標準是我所假設的所有*消息的限制數字,其中'imap_search'沒有提供。有可能是黑客,看我的編輯,讓我知道你的想法。 – 2010-02-01 14:56:55