2012-03-06 11 views
7

है, मैं अजगर के माध्यम से जीमेल के आईएमएपी इंटरफ़ेस तक पहुंच रहा हूं। मैं इस तरह एक कमांड चलाएँ:आईएमएपी "सर्च हेडर" कमांड विफल रहता है जब खोज-पाठ में विस्मयादिबोधक चिह्न (!), एम्परसेंड (&), आदि

UID SEARCH HEADER Message-ID "[email protected]" 

सफल होता है कि (रिटर्न मिलान संदेश का 1 यूआईडी, या 0 अगर यह मौजूद नहीं है)। हालांकि, यदि खोज-पाठ में कुछ वर्ण होते हैं (जैसे & या!), तो उस बिंदु पर खोज-पाठ को छोटा कर दिया जाता है। इसका मतलब यह है:

UID SEARCH HEADER Message-ID "[email protected]" 

व्यवहार किया जाता है के रूप में

UID SEARCH HEADER Message-ID "" 
इसके अलावा

ही:

UID SEARCH HEADER Message-ID "abc" 

मैं IMAP भाषा के माध्यम से चले गए हैं:

UID SEARCH HEADER Message-ID "[email protected]" 

के रूप में व्यवहार किया जाता है कल्पना, और एबीएनएफ भाषा से यह कल्पना करता है ऐसा लगता है कि उन वर्णों को वैध होना चाहिए। जीमेल इन खोज वाक्यांशों को "!" पर क्यों छोटा कर रहा है और "&" वर्ण? क्या उनसे बचने का कोई तरीका है? (मैंने कोशिश की है!, एक बुरी तरह से एन्कोडेड स्ट्रिंग के रूप में विफल)। क्या कोई आरएफसी या डॉक्टर है जो दिखाता है कि वास्तव में क्या स्वीकार किया जाना चाहिए? क्या यह जीमेल के आईमैप कार्यान्वयन में एक बग है?

मैं भी कोशिश की है शाब्दिक प्रारूप, एक ही परिणाम:

UID SEARCH HEADER Message-ID {3} 
abc 

धन्यवाद:

UID SEARCH HEADER Message-ID {15} 
[email protected] 

फिर भी रूप में व्यवहार किया!

IMAP RFC3501 खोजें कमान: http://tools.ietf.org/html/rfc3501#section-6.4.4 औपचारिक वाक्य रचना: http://tools.ietf.org/html/rfc3501#section-9

+0

मैं पुष्टि कर सकते हैं:

तो यहाँ कि तुम मेरी MailKit लाइब्रेरी का उपयोग सी # में जीमेल के साथ इस्तेमाल कर सकते हैं (जो एक काफी कम स्तर IMAP पुस्तकालय है तो यह आसानी से बुनियादी स्यूडोकोड में अनुवाद होना चाहिए) एक संभावित समाधान है कि खोज क्वेरी में विस्मयादिबोधक चिह्न का उपयोग करने के बारे में कुछ खास नहीं है। यह सबसे अधिक संभावना है कि आपको जीमेल में एक बग मिला।मैं विकास के दौरान कई अलग-अलग आईएमएपी सर्वरों का उपयोग करने का सुझाव देता हूं, खासकर जब से जीमेल का आईएमएपी कार्यान्वयन आईएमएपी विनिर्देश के अनुरूप नहीं है। – nosid

+0

धन्यवाद nosid। दुर्भाग्यवश, इस कोड के साथ उपयोग करने के लिए आईएमएपी सर्वर जीमेल है, इसलिए दूसरों पर परीक्षण इस बग के साथ मदद नहीं करेगा। लेकिन यह जानना अच्छा है कि मैं गलत गलत नहीं पढ़ रहा हूं। मैं Google पर इस बग की रिपोर्ट करने का एक तरीका खोजने का प्रयास करूंगा। – rocketmonkeys

+0

हां, मुझे वर्तमान में इस समस्या का अनुभव होता है जब जीमेल पर आईएमएपी खोज * अल्पाइन * मेल क्लाइंट के माध्यम से '!' वाले विषयों के साथ सभी संदेशों का चयन करने का प्रयास कर रहा है। –

उत्तर

1

मैं अब महीने के लिए अपने आप को इस मुद्दे मार दिया गया है।

खोज हेडर संदेश-आईडी < -! &! ...>

'< -' से शुरू होने वाली कुछ MsgId खोजों को छोड़कर समाप्त हुआ। & के साथ समस्याएं भी देखें! ... यह सुनिश्चित नहीं है कि इस अच्छी तरह से काम कैसे करें।

क्या आपने कभी इस बग पर Google से एक शब्द प्राप्त किया है?

धन्यवाद बहुत

2

मैं काफी हद तक मूल प्रश्न के लिए टिप्पणी में खोज (मैक्स) के द्वारा Gmail की खोज कार्यान्वयन एक समर्थन डेटाबेस शब्द में पहले से ही विभाजित शाब्दिक सामग्री है कि का उपयोग करता है पर मेरा उत्तर आधारित कर रहा हूँ के बजाय टोकन पूरा पाठ संग्रहित करना और एक सबस्ट्रिंग खोज करना।

// given: text = "[email protected]" 

// split the search text on '!' 
var words = text.Split (new char[] { '!' }, StringSplitOptions.RemoveEmptyEntries); 

// build a search query... 
var query = SearchQuery.HeaderContains ("Message-ID", words[0]); 
for (int i = 1; i < words.Count; i++) 
    query = query.And (SearchQuery.HeaderContains ("Message-ID", words[i])); 

// this will result in a query like this: 
// HEADER "Message-ID" "abc" HEADER "Message-ID" "[email protected]" 

// Do the UID SEARCH with the constructed query: 
// A001 UID SEARCH HEADER "Message-Id" "abc" HEADER "Message-Id" "[email protected]" 
var uids = mailbox.Search (query); 

// Now UID FETCH the ENVELOPE (and UID) for each of the potential matches: 
// A002 UID FETCH <uids> (UID ENVELOPE) 
var messages = mailbox.Fetch (uids, MessageSummaryItems.UniqueId | 
    MessageSummaryItems.Envelope); 

// Now perform a manual comparison of the Message-IDs to get only exact matches... 
var matches = new UniqueIdSet (SortOrder.Ascending); 
foreach (var message in messages) { 
    if (message.Envelope.MessageId.Contains (text)) 
     matches.Add (message.UniqueId); 
} 

// 'matches' now contains only the set of UIDs that exactly match your search query 
संबंधित मुद्दे