2011-01-06 9 views
6

जब मैं अपने जीमेल इनबॉक्स पर एक बहुत ही सरल imap_search चलाता हूं, तो खोज कम से कम संदेश देता है।PHP imap_search जीमेल इनबॉक्स में सभी संदेशों का पता नहीं लगा रहा

यहां यह स्क्रिप्ट है कि जीमेल खाते वाला कोई भी व्यक्ति चला सकता है।

$host = '{imap.gmail.com:993/imap/ssl}'; 
$user = 'foo'; 
$pass = 'bar'; 

$imapStream = imap_open($host,$user,$pass) or die(imap_last_error()); 

$messages = imap_search($imapStream,"ALL"); 

echo count($messages); 

imap_close($imapStream); 

यह 39 संदेश देता है। लेकिन, मेरे पास मेरे इनबॉक्स में 100 संदेश हैं, कुछ बातचीत में बंडल किए गए हैं, कुछ दूसरे खाते (गिलहरी मेल) से अग्रेषित हैं।

क्या कोई भी इन परिणामों को डुप्लिकेट कर सकता है, और/या मुझे बता सकता है कि क्या हो रहा है?


अन्य सर्वर तार मैं कोशिश की है, सभी एक ही परिणाम लौटने:

{imap.gmail.com:993/imap/ssl/novalidate-cert} 
{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX 
{imap.gmail.com:993/imap/ssl}INBOX 

जीमेल के IMAP सुविधा का समर्थन: http://mail.google.com/support/bin/answer.py?hl=en&answer=78761

+0

'imap_sort',' imap_num_msg', और 'imap_search', एक ही परिणाम का प्रयास किया। – Ben

+0

Google लैब्स में "उन्नत IMAP नियंत्रण" का प्रयास किया, वही परिणाम। – Ben

उत्तर

8

महत्वपूर्ण बालों के झड़ने के बाद, मुझे जवाब मिल गया। यह एक भ्रामक यूआई था।

जीमेल समूह के संदेशों को डिफ़ॉल्ट रूप से "वार्तालाप" में जोड़ता है। इन बातचीत में संग्रहीत संदेश शामिल हो सकते हैं।

तो, उदाहरण के लिए, बॉब का इनबॉक्स जैसा दिखता है 25 संदेशों की 4 बातचीत है, जो स्पष्ट रूप से 100 इनबॉक्स संदेशों को वापस करनी चाहिए। हकीकत में, 60 संदेश संदेश में हैं (इनबॉक्स नहीं), इसलिए imap_search()40 लौटाता है। इन संदेशों को जादुई रूप से संग्रह से बाहर खींच लिया गया है और इनबॉक्स बातचीत में रखा गया है।

सेटिंग्स> जनरल मेनू में, आप बातचीत दृश्य टॉगल कर सकते हैं, जो उन शरारती संग्रहीत संदेशों के सभी वापस रखा जाएगा, जहां वे हैं, और अपने सच्चे इनबॉक्स दृश्य दिखा।

+0

'महत्वपूर्ण बालों के झड़ने के बाद' एलओएल ... यहां वही – Umair

0

imap_search मापदंड सभी - के बाकी मिलान सभी संदेशों को लौट मानदंड, इसलिए मैं आपसे पूछता हूं कि बाकी मानदंड कहां है?

आप imap_sort($imapStream, 'SORTDATE', 0); का उपयोग कर सकते हैं (imap_sort - दिए गए पैरामीटर imap_sort द्वारा संदेश संख्या प्राप्त करता है और टाइप करता है)।


संपादित करें, यहाँ कुछ कोड है कि imap_num_msg के बजाय में आप कर रहे हैं इनबॉक्स में वे सभी संदेशों के माध्यम से चला जाता है,, आप imap_sort इस्तेमाल कर सकते हैं के रूप में, कि पहले कहा, ताकि आप आप हल कर इनबॉक्स कर रहे हैं आप की तरह हो जाता है।

<?php 
    $imap = imap_open("{mail.yourserver.com:143}INBOX", "username", "password"); 
    $message_count = imap_num_msg($imap); 

    for ($i = 1; $i <= $message_count; ++$i) { 
     $header = imap_header($imap, $i); 
     $body = trim(substr(imap_body($imap, $i), 0, 100)); 
     $prettydate = date("jS F Y", $header->udate); 

     if (isset($header->from[0]->personal)) { 
      $personal = $header->from[0]->personal; 
     } else { 
      $personal = $header->from[0]->mailbox; 
     } 

     $email = "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>"; 
     echo "On $prettydate, $email said \"$body\".\n"; 
    } 

    imap_close($imap); 
?> 
+0

@poelinca - "ALL" मानदंड है, मैं इनबॉक्स में सभी संदेशों को चाहता हूं। मैंने अभी 'imap_sort' की कोशिश की, और यह वही परिणाम लौटा। :/ – Ben

+0

कृपया मेरा अपडेट उत्तर देखें, php.net को देखकर सभी को अकेले इस्तेमाल नहीं किया जाना चाहिए, इसका मतलब यह होगा कि आप किसी एक स्टैंडअलोन मानदंड चुड़ैल के रूप में उपयोग कर सकते हैं जो काम नहीं करेगा? –

+0

@poelinca - 'ALL' स्वयं ही वही परिणाम देता है जब मैं इसे मानदंडों के साथ विभाजित करता हूं। क्या आपके पास कोई स्रोत है जब आप कहते हैं "अकेले इस्तेमाल नहीं किया जाना चाहिए"? इसके अलावा, कोई भी काम नहीं करेगा क्योंकि मानदंडों की सूची में नहीं है। – Ben

संबंधित मुद्दे