imapami.git
7 years agoremove debug print master
Olivier Matz [Fri, 9 Dec 2016 12:40:22 +0000 (13:40 +0100)]
remove debug print

Fixes: c3f8bd76c0ca ("use uids to manipulate mails")
Signed-off-by: Olivier Matz <zer0@droids-corp.org>
7 years agoactions: surround flags with parenthesis
Olivier Matz [Sun, 27 Nov 2016 14:40:04 +0000 (15:40 +0100)]
actions: surround flags with parenthesis

It looks that when using uid, some servers expects that the flags
are surrounded by parenthesis. Else, we get this error:

UID command error: BAD
['Error in IMAP command UID STORE: Flags list contains non-atoms.']

Seen also here:
https://github.com/coddingtonbear/django-mailbox/commit/dad65d802c7eab86c88dca3ef466dc4c43daffc0

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
7 years agoutils: fix exception with bad encoding
Olivier Matz [Sun, 27 Nov 2016 14:38:39 +0000 (15:38 +0100)]
utils: fix exception with bad encoding

Do not be strict when converting to unicode from an unknown encoding.
This avoids an unrecoverable exception.

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
7 years agofix race when receiving mail during rule process
Olivier Matz [Sun, 27 Nov 2016 14:37:18 +0000 (15:37 +0100)]
fix race when receiving mail during rule process

Get the state (uidnext) for each inbox used in the configuration.
It gives the uid of the next message the will be added in the mbox.
We will only care about messages with a uid lower than this uidnext,
to avoid race conditions with a message arriving while we are in the

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agocond: fix "not" condition
Olivier Matz [Tue, 29 Mar 2016 08:38:40 +0000 (10:38 +0200)]
cond: fix "not" condition

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agouse uids to manipulate mails
Olivier Matz [Tue, 29 Mar 2016 08:38:13 +0000 (10:38 +0200)]
use uids to manipulate mails

The item identifier can be modified in some conditions, for instance
after an expunge operation. This could leads to manipulate the wrong
mail. Use uids instead, which does not vary for a given mail.

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agoutils: relax conversion to unicode
Olivier Matz [Sun, 29 Nov 2015 11:01:30 +0000 (12:01 +0100)]
utils: relax conversion to unicode

Some mails have incorrectly encoded headers, resulting in an exception
when decoding them. This can be reproduced manually:

>>> s='Vos deux avantages : 20% de r\xc3\xa9duction  + Q1|\x051\xa5\xd9\xc9\x85\xa5\xcd\xbd\xb8\x80\xd0\xe1\xa0\x81\xbd\x99\x99\x95\xc9\xd1\x94\x80\x84'
>>> s.decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)

Be more relax and try to fix the encoding errors instead of throwing
an exception.

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agoutils: fix decoding of invalid headers
Olivier Matz [Sun, 29 Nov 2015 10:51:34 +0000 (11:51 +0100)]
utils: fix decoding of invalid headers

For some mails, the following exception was thrown:

Traceback (most recent call last):
  File "/usr/local/bin/imapami", line 9, in <module>
    load_entry_point('imapami==0.1.0', 'console_scripts', 'imapami')()
  File "build/bdist.linux-x86_64/egg/imapami/__init__.py", line 321, in main
  File "build/bdist.linux-x86_64/egg/imapami/__init__.py", line 221, in process_rules
  File "build/bdist.linux-x86_64/egg/imapami/rules.py", line 251, in process
  File "build/bdist.linux-x86_64/egg/imapami/actions.py", line 149, in process
  File "build/bdist.linux-x86_64/egg/imapami/actions.py", line 317, in process
  File "build/bdist.linux-x86_64/egg/imapami/actions.py", line 98, in evaluate
  File "build/bdist.linux-x86_64/egg/imapami/utils.py", line 65, in headers_to_unicode
  File "/usr/lib/python2.7/email/header.py", line 108, in decode_header
    raise HeaderParseError
email.errors.HeaderParseError

It can be reproduced manually with:

>>> import email.header
>>> email.header.decode_header('=?UTF-8?B?UG91ciB2b3MgYWNoYXRzIGRlIE5vw6tsLCBwcm9maXRleiBkJ3VuIGRv?==?UTF-8?B?dWJsZSBhdmFudGFnZSAh?=')

According to:
http://stackoverflow.com/questions/7384006/email-header-decode-headers-throws-an-headerparseerror
A workaround is to fix the header manually.

Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agoactions: remove undeclared variables in log
Olivier Matz [Sun, 29 Nov 2015 10:50:28 +0000 (11:50 +0100)]
actions: remove undeclared variables in log

This log comes from a bad copy/paste.

Fixes: 95f172d6c ("actions: fix move")
Signed-off-by: Olivier Matz <zer0@droids-corp.org>
8 years agoconditions: fix criteria for 'or'
Olivier Matz [Wed, 25 Nov 2015 17:54:18 +0000 (18:54 +0100)]
conditions: fix criteria for 'or'

The criteria was wrongly set to None as the following code has
no return value:
  criteria = set().add(criteria)

We should do this instead:
  criteria = set([criteria])

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
8 years agoconditions: fix criteria for 'not'
Olivier Matz [Wed, 25 Nov 2015 17:53:24 +0000 (18:53 +0100)]
conditions: fix criteria for 'not'

Only the check was inverted, but the criteria should be too.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
8 years agoactions: fix move
Olivier Matz [Wed, 25 Nov 2015 17:52:12 +0000 (18:52 +0100)]
actions: fix move

It is not possible to use ImapamiActionCopy.process() or
ImapamiActionDelete.process() methods on the ImapamiActionMove
object. So just duplicate the code for now.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
8 years agoFirst public revision
Olivier Matz [Sun, 22 Nov 2015 12:57:41 +0000 (13:57 +0100)]
First public revision

Signed-off-by: Olivier Matz <zer0@droids-corp.org>