I'm trying to fetch all emails whose subject starts with "New Order" but I can't seem to figure it out. Currently I can search for an exact match with a setup like so...
result, data = M.uid('search', None, '(HEADER Subject "Subject Here")')
However this won't retrieve any messages that aren't an exact match. How would I go about doing a partial match?
If it matters I am talking to gmail's imap server(s).
Thanks
According to the IMAP RFC SEARCH
should do all of its matching as substring matches:
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.
Therefore, a search
M.uid('search', None, 'HEADER Subject "New Order"')
should match all messages where New Order
occurs anywhere in the subject. If it is not, you should notify Google that their server does not implement IMAP properly. In the meantime you might try using the SUBJECT
key as in
M.uid('search', None, 'SUBJECT "New Order"')
Also, according to Google's IMAP extension documentation you might be able to use the X-GM-RAW
key and a gmail search string as in
M.uid('search', None, r'X-GM-RAW "subject:\"New Order\""')
This worked for me:
mail.uid('search', None, r'(X-GM-RAW "subject:\"New Order\"")')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With