This question is related to question Python IMAP search using a subject encoded with iso-8859-1, but the reply given there is not working for me.
I am doing the following IMAP search in python:
typ, data = self.M.search("utf-8", "(SUBJECT %s)" % u"réception".encode("utf-8"))
And I get the following exception:
...
typ, data = self.M.search("utf-8", "(SUBJECT %s)" % u"réception".encode("utf-8"))
File "/usr/local/python/2.7.2/lib/python2.7/imaplib.py", line 625, in search
typ, dat = self._simple_command(name, 'CHARSET', charset, *criteria)
File "/usr/local/python/2.7.2/lib/python2.7/imaplib.py", line 1070, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/local/python/2.7.2/lib/python2.7/imaplib.py", line 905, in _command_complete
raise self.error('%s command error: %s %s' % (name, typ, data))
error: SEARCH command error: BAD ['Could not parse command']
Why is that? How can I solve this problem?
import imaplib
import getpass
email = "[email protected]"
sock = imaplib.IMAP4_SSL("imap.gmail.com", 993)
sock.login(email, getpass.getpass())
# select the correct mailbox...
sock.select()
# turn on debugging if you like
sock.debug = 4
then:
# use the undocumented IMAP4.literal attribute
sock.literal = "réception"
sock.uid('SEARCH', 'CHARSET', 'UTF-8', 'SUBJECT')
u"réception"
will need to be wrapped with quotes: u'"réception"'
, as IMAPLIB will not quote the string for you in the list.
Update: I could not get gmail's IMAP implementation to accept even a quoted string, and had to use IMAP literal syntax. I'm not sure if this is limitation of my encoding using socat
, or a limitation with gmail.
a UID SEARCH CHARSET utf-8 SUBJECT "réception"
a BAD Could not parse command
a UID SEARCH CHARSET utf-8 SUBJECT {10}
+ go ahead
réception
* SEARCH
a OK SEARCH completed (Success)
Unfortunately, imaplib does not provide any way to force using of an IMAP literal.
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