This is a test I did with IMAP on outlook.com connecting through OAuth2
# THIS IS CORRECT
ipdb> mail.criterion = '(FROM "ship-confirm@amazon.com")'
ipdb> mail.get_headers()
[('"Inbox"', [<mailengine.scrubber.IMAPScrubber object at 0x110c21650>, <mailengine.scrubber.IMAPScrubber object at 0x110c21290>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f6d0>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f950>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f750>])]
# THIS IS INCORRECT (we should have 3 emails)
ipdb> mail.criterion = '(NOT FROM "ship-confirm@amazon.com")'
ipdb> mail.get_headers()
[]
# TEST (correctly getting all emails)
ipdb> mail.criterion = '(NOT FROM "anyword")'
ipdb> mail.get_headers()
[('"Inbox"', [<mailengine.scrubber.IMAPScrubber object at 0x110c21290>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f950>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f850>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f690>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f6d0>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f750>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f810>, <mailengine.scrubber.IMAPScrubber object at 0x110c1f1d0>])]
# TEST (incorrectly getting 0 emails)
ipdb> mail.criterion = '(NOT FROM "anyword@gmail.com")'
ipdb> mail.get_headers()
[]
My (not so wild) guess is that the @
symbol is breaking the the NOT FROM
search. Maybe I should scape it? horrible bug?