| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
| |
176cffcd ("refactor alot.db.utils.remove_cte", 2018-12-04) created a few
problems with 8bit quoted-printable e-mails, see #1291 #1360.
This commit restores the old libmagic fallback which did not cause this
problem.
|
|
|
|
| |
to help troubleshoot problems
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In case of a '.gpg' file being attached to a non-encrypted email some
email clients (like thunderbird) will mark this attachment as content
type 'application/pgp-encrypted'. Alot used to discard that mime part
because the same content type is being used in PGP/MIME to signal de
version:
https://tools.ietf.org/html/rfc3156#section-6.1
Now alot differenciates two cases:
* Normal PGP/MIME encrypted messages, where we need to discard the
'application/pgp-encrypted' mime part. Detected because this part is
followed by a 'application/octet-stream' mime part.
* A mime part with aplication/pgp-encrypted as content type, that is
displayed as attachment.
|
|
|
|
|
|
|
|
| |
pep8!
Better variable names, new feature into docs.
Make sphinx documentation.
|
| |
|
|
|
|
| |
Fixes #1351.
|
| |
|
|
|
|
|
| |
... since accounts' addresses can overlap and get_account_by_address
promises too much. Also remove now-obsolete get_addresses.
|
|
|
|
| |
fixes #1230, fixes an unfiled bug in clear_my_address()
|
|
|
|
| |
simplifies a few tests, fixes #1177
|
|
|
|
|
|
|
| |
This makes remove_cte more accepting of incorrect
Content-Transfer-Encoding header values: instead of looking for exact
matches of valid values, it now tests if a valid value appears as
substring.
|
|
|
|
|
|
| |
This adds a test for detecting a malformed content-transfer-encoding
(trailing semi-colon).
It also changes the raised exception to the more appropriate ValueError.
|
|
|
|
| |
this fixes #1336
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bounce correctly determines the address and account to send the bounce
from. It uses the account to choose an address book for "to:" completion
and passes the sender address as "Resent-From:" to SendCommand(). The
latter uses the "From:" header, though, to determine the sending account
again and (in the case of a bounce) wrongly.
Make SendCommand() use "Resent-From:" if present and "From:" else.
Code remark: specifying "False" as the default return value for get()
ist not necessary; it is meant to make this short form clearer to read,
and to safeguard for times when '' or None do not evaluate to False
here.
|
| |
|
| |
|
|
|
|
|
|
| |
When the key is known or just the signature is invalid gpgme raises
'BadSignatures'. Up to now we were not acknoledging it when using
session-keys, making impossible to open emails without the signing key.
|
|
|
|
| |
Fixes #1325
|
|
|
|
| |
Closes: #1232
|
|\
| |
| | |
Check the return code from sendmail
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
notmuch caches the OpenPGP session keys if configured to do so. See
index.decrypt on:
https://notmuchmail.org/manpages/notmuch-config-1/
Using the cached session key decryption of messages can be done without
the need of having the private OpenPGP key. There is some speed up on
decryption, mostly notable on long encrypted threads.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Urwid + asyncio has been known to have very high CPU usage for 4 years
now, and it hasn't been fixed. That basically makes it impossible to
switch event loops. We can still get the asyncio syntax goodness but
using the twisted asyncioreactor and then initializing urwid with the
Twisted loop which doesn't have this problem.
Fixes #1302
|
|/
|
|
|
| |
This is recommended since other implementations can use this hook to
return their own Future compatible implementations.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently in db.utils.extract_body we try to add a Content-Disposition
header, regardless of whether an email already has one. This isn't
actually legal, and individual mime message may only have one C-D. The
correction is to replace the header with the modified header if it
already exists, and to add a new one only if the message doesn't have
one.
Note that I haven't actually seen a message that hits the path that
would need "add_header", only "replace_header". I have however included
it because it would be a behavioral change to not handle that case.
Fixes #1297
|
|
|
|
|
|
|
|
|
|
| |
For large threads (I can reproduce on threads with ~50 messages),
changing messages can become quite slow, especially if there are a
significant number of folded messages. Removing the call to refresh the
body after moving seems to fix this.
There may be side effects of this change, and it may be required in some
cases, just not all of them.
|
|
|
|
|
|
|
| |
Otherwise they default to the Compat32 policy, which isn't want we want,
since we end up with a mixture of new and old types.
Fixes: #1292
|
| |
|
| |
|
|
|
|
| |
This is more elegant and efficient way to handle this.
|
|
|
|
|
| |
Which appears to be capable of doing all the same things, but is in the
stdlib instead of something we hand rolled.
|
|
|
|
|
|
|
|
|
|
|
| |
In python 3 with the use of Policy objects (other than the Compat32
object which maintains the previous (python 2.x and <=3.2) API) change
the way headers work, and the old Header object is no longer used. This
is rather convenient in that python now implements many of the rules
required for sepcial header types, but it changes the API. This fixes
that by encoding the Header objects to strings.
Fixes #1289
|
|
|
|
| |
Since that's what they're for.
|
|
|
|
|
|
| |
This allows it to easily wrap calls that are themselves coroutines,
while it's still able to wrap synchronous calls. This fixes the async
test and allows hooks that are coroutines to work.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Python 3.3 added a new feature to the email module, policies
(https://docs.python.org/3.5/library/email.policy.html). Policy objects
allow precise control over how numerous features work when converting to
and from str or bytes. With the `email.policy.SMTP` the behavior of
email_as_bytes and email_as_string can be achieved using the builtin
`.as_string()` and `.as_bytes()` methods, without custom code or the
need to test it. Additionally these methods handle corner cases that we
don't currently handle, such as multi-part messages with different
encodings.
Fixes #1257
|
|
|
|
| |
that was solved upstream: https://bugs.python.org/issue14983
|
|
|
|
|
|
|
| |
"async" is a reserved keyword in Python 3.7, so cannot be used for
method names.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
|
|
|
|
|
|
| |
The "2" version was used in non-twisted contexts, now that we don't use
twisted we can drop this and rename the "2" variant to the normal
variant.
|
|
|
|
|
| |
This moves the actual event loop to be the default asyncio eventloop
instead of the twisted reactor.
|
|
|
|
|
|
| |
This patch is sketchy, it makes the UI start up slowly, and it breaks in
a bunch of cases where it get's defereds but asyncio doesn't expect
that.
|
|
|
|
|
|
|
|
|
|
|
| |
asyncio's Futures are much like twisted's Deferreds, they represent a
value that is not yet available, and they can be awaited like a
coroutine.
For the moment we still need to return a deferred because the twisted
eventloop doesn't use Futures, it uses Deferreds; once we can remove
twisted's eventloop we can remove the conversion from a Future to a
deferred.
|
|
|
|
|
|
| |
This is a pretty invasive patch, since the ui code is used so
extensively, it requires going into a lot of other code and converting
those to coroutines, since before they returned deferred's.
|
|
|
|
|
|
| |
asyncio doesn't have a loopingCall helper, so I've implemented a
coroutine that does the same thing, it takes a callable, a period, and
then forwards all other arguments. This is tested and working.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This is the obvious thing to do, and it works, but it does introduce
some latency into starting alot.
|
|
|
|
| |
Found due to another bug :)
|
|
|
|
|
|
| |
Rather than returning a deferred in some cases, this makes the function
a coroutine, in some cases it calls regular subprocess, in other cases
it uses asyncio subprocess.
|