2012-11-15 65 views
7

Tôi đang cố gắng tìm nạp tất cả các email có chủ đề bắt đầu bằng "Đơn đặt hàng mới" nhưng dường như tôi không thể tìm ra nó. Hiện tại, tôi có thể tìm kiếm kết hợp chính xác với thiết lập như vậy ...Tìm kiếm IMAP bằng Python cho chủ đề một phần

result, data = M.uid('search', None, '(HEADER Subject "Subject Here")') 

Tuy nhiên việc này sẽ không truy xuất bất kỳ thư nào không khớp chính xác. Làm thế nào tôi sẽ đi về làm một phần phù hợp?

Nếu vấn đề là tôi đang nói chuyện với (các) máy chủ imap của gmail.

Cảm ơn

+0

api/thư viện bạn đang sử dụng gì, cũng là những gì 'm'? – John

+0

Bạn cũng có thể thấy http://stackoverflow.com/a/642988/322909 hữu ích. – John

+1

Tôi đang sử dụng thư viện imaplib và M là một đối tượng IMAP4. Tôi đã hy vọng sẽ chỉ kéo các tin nhắn có các chủ đề mong muốn và không phải mọi thông điệp mà tôi tin là những gì họ đang làm trong liên kết của bạn mặc dù tôi có thể sai. – Kazurik

Trả lời

14

Theo IMAP RFCSEARCH nên làm tất cả các khớp của nó như là chuỗi con phù hợp:

In all search keys that use strings, a message matches the key if the string is a substring of the field. The matching is case-insensitive.

Do đó, một tìm kiếm

M.uid('search', None, 'HEADER Subject "New Order"') 

phải phù hợp với tất cả các thư nơi New Order xảy ra bất cứ nơi nào trong môn học. Nếu không, bạn nên thông báo cho Google rằng máy chủ của họ không triển khai IMAP đúng cách. Trong khi đó bạn có thể thử sử dụng phím SUBJECT như trong

M.uid('search', None, 'SUBJECT "New Order"') 

Ngoài ra, theo Google's IMAP extension documentation bạn có thể sử dụng X-GM-RAW chủ chốt và một chuỗi tìm kiếm gmail như trong

M.uid('search', None, r'X-GM-RAW "subject:\"New Order\""') 
+1

Tôi đã tìm ra điều gì đã xảy ra. Google/gmail giả định rằng tất cả các tìm kiếm là những từ có nghĩa là '(HEADER Subject' Subject Here ')' sẽ khớp với những thứ như "Subject Here Extra words", nhưng không phải "Subject Here5". Tôi vẫn không chắc chắn làm thế nào để làm một tìm kiếm không từ với gmail hoặc nếu nó thậm chí có thể. – Kazurik

+0

Bạn sẽ phải sử dụng cú pháp tìm kiếm mở rộng của gmails. Họ chỉ hỗ trợ tìm kiếm theo định hướng từ để tìm kiếm thông thường. (Các bit x-gm-ông cung cấp) – Max

+1

Khi tôi chạy "M.uid ('tìm kiếm', Không, r'X-GM-RAW" chủ đề: \ "Đặt hàng mới \" "')" Tôi nhận được sau đây lỗi: "imaplib.error: Lỗi lệnh UID: BAD ['Không thể phân tích cú pháp lệnh']". Bất kỳ ý tưởng tại sao có thể? – Kazurik

4

này làm việc cho tôi:

mail.uid('search', None, r'(X-GM-RAW "subject:\"New Order\"")') 
-2

này đã làm việc cho tôi:

M.uid('search',None, '(SUBJECT "New Order")') 

Format cho tìm kiếm là (EmailAttribute "your searchstring")

Hy vọng nó sẽ làm việc cho bạn.

0

này đã làm việc cho tôi:

result, data = m.search(None, 'X-GM-RAW', 'subject: New Order') 
Các vấn đề liên quan