2014-01-28 109 views
0

我正在用imap在php中進行webmail項目。 imap_search函數不適用於多個條件。在單一搜索條件下,它工作正常。 這是我的代碼:imap_search不能在php中使用多個條件工作

$boxes = imap_search($mbox, 'OR SUBJECT "'.$search_keyword.'" BODY "'.$search_keyword.'"', SE_UID); 
+1

這看起來或多或少權(不考慮zzlalani說的話)。你能顯示實際的IMAP命令嗎?你有兩臺服務器測試過嗎?順便說一句,如果搜索詞包含「,\,ë或±等字符,你的代碼就會中斷。 – arnt

+0

如果我在imap_search中使用」OR「關鍵字,它不會顯示任何結果。對於單個條件,它工作正常。參考,不工作哦,笏做的? –

+0

直接嘗試使用IMAP,看看它是否有效。這樣你就可以知道問題出在客戶端代碼還是服務器代碼中。'telnet imap.example.com 143', 'a login username password','b select inbox','c uid search or subject'arnt'body'arnt''。如果這不起作用,這是一個服務器問題,如果它工作,你必須找出你的代碼生成以及爲什麼它不會生成正確的命令。玩得開心 – arnt

回答

0

嘗試,這可能是

$SUBJECT = imap_search($mbox, 'SUBJECT "'.$search_keyword.'"', SE_UID); 
$BODY = imap_search($mbox, 'SUBJECT "'.$search_keyword.'"', SE_UID); 

$boxes = array_merge($SUBJECT, $BODY); 
+0

它沒有工作。它沒有顯示消息。 –

+0

你想'OR'查詢或'AND'查詢? – zzlalani

+0

或只有...如果用戶在前端搜索任何單個關鍵字,我們將檢查郵件信息中的所有部分(如FROM,TO,SUBJECT,BODY),然後向他顯示過濾結果。 –

1

感謝您的建議。我已經寫了一些基本條件的代碼。現在它工作正常。這是我的代碼。

//for multiple search criteria starts here for concatenate 
$boxes = imap_search($mbox, 'FROM "'.$search_keyword.'"', SE_UID); 

//check if first search have mails or not 
if($boxes) 
{ 
    if(imap_search($mbox, 'SUBJECT "'.$search_keyword.'"', SE_UID)) 
    { 
     $boxes = $boxes + imap_search($mbox, 'SUBJECT "'.$search_keyword.'"', SE_UID); 
    } 
    else 
    { 
     $boxes = imap_search($mbox, 'SUBJECT "'.$search_keyword.'"', SE_UID); 
    } 
} 
0

我在Windows上使用PHP 5.5.12,並確認「OR」運算符不能與函數Imap_search()一起使用。您需要對服務器進行多個查詢才能獲得您想要的結果。

也許值得一提的是,使用關鍵詞「BODY」或「TEXT」來搜索電子郵件的主體也會使用Imap_search()匹配位於標題(例如FROM,TO,SUBJECT)中的內容。

1

試試這個代碼:

$emails = imap_search($inbox, 'TO "'.$email.'" SUBJECT "'.$search_text.'"',E_UID); 
相關問題