adapt to starttls interface change in imap_tools

pin imap-tools version to avoid breaking changes
improve mail log
This commit is contained in:
phail 2022-04-09 13:07:14 +02:00
parent c161829803
commit 3c8196527f
2 changed files with 48 additions and 30 deletions

View File

@ -19,7 +19,7 @@ djangorestframework = "~=3.13"
filelock = "*" filelock = "*"
fuzzywuzzy = {extras = ["speedup"], version = "*"} fuzzywuzzy = {extras = ["speedup"], version = "*"}
gunicorn = "*" gunicorn = "*"
imap-tools = "*" imap-tools = "~=0.53.0"
langdetect = "*" langdetect = "*"
pathvalidate = "*" pathvalidate = "*"
pillow = "~=9.0" pillow = "~=9.0"

View File

@ -18,6 +18,7 @@ from imap_tools import MailboxFolderSelectError
from imap_tools import MailBoxUnencrypted from imap_tools import MailBoxUnencrypted
from imap_tools import MailMessage from imap_tools import MailMessage
from imap_tools import MailMessageFlags from imap_tools import MailMessageFlags
from imap_tools.mailbox import MailBoxTls
from paperless_mail.models import MailAccount from paperless_mail.models import MailAccount
from paperless_mail.models import MailRule from paperless_mail.models import MailRule
@ -89,14 +90,18 @@ def make_criterias(rule):
def get_mailbox(server, port, security): def get_mailbox(server, port, security):
try:
if security == MailAccount.IMAP_SECURITY_NONE: if security == MailAccount.IMAP_SECURITY_NONE:
mailbox = MailBoxUnencrypted(server, port) mailbox = MailBoxUnencrypted(server, port)
elif security == MailAccount.IMAP_SECURITY_STARTTLS: elif security == MailAccount.IMAP_SECURITY_STARTTLS:
mailbox = MailBox(server, port, starttls=True) mailbox = MailBoxTls(server, port)
elif security == MailAccount.IMAP_SECURITY_SSL: elif security == MailAccount.IMAP_SECURITY_SSL:
mailbox = MailBox(server, port) mailbox = MailBox(server, port)
else: else:
raise NotImplementedError("Unknown IMAP security") # pragma: nocover raise NotImplementedError("Unknown IMAP security") # pragma: nocover
except Exception as e:
print(f"Error while retrieving mailbox from {server}: {e}")
raise
return mailbox return mailbox
@ -154,21 +159,26 @@ class MailAccountHandler(LoggingMixin):
self.log("debug", f"Processing mail account {account}") self.log("debug", f"Processing mail account {account}")
total_processed_files = 0 total_processed_files = 0
try:
with get_mailbox( with get_mailbox(
account.imap_server, account.imap_server,
account.imap_port, account.imap_port,
account.imap_security, account.imap_security,
) as M: ) as M:
try: try:
M.login(account.username, account.password) M.login(account.username, account.password)
except Exception: except Exception as e:
raise MailError(f"Error while authenticating account {account}") self.log(
"error",
f"Error while authenticating account {account}: {e}",
exc_info=False,
)
return total_processed_files
self.log( self.log(
"debug", "debug",
f"Account {account}: Processing " f"{account.rules.count()} rule(s)", f"Account {account}: Processing "
f"{account.rules.count()} rule(s)",
) )
for rule in account.rules.order_by("order"): for rule in account.rules.order_by("order"):
@ -180,6 +190,14 @@ class MailAccountHandler(LoggingMixin):
f"Rule {rule}: Error while processing rule: {e}", f"Rule {rule}: Error while processing rule: {e}",
exc_info=True, exc_info=True,
) )
except MailError:
raise
except Exception as e:
self.log(
"error",
f"Error while retrieving mailbox {account}: {e}",
exc_info=False,
)
return total_processed_files return total_processed_files