Enhancement: check for mail destination directory, log post-consume errors (#7808)

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
This commit is contained in:
Martin Richtarsky
2024-10-03 05:21:35 +02:00
committed by GitHub
parent f8d79b012f
commit b3487f1843
2 changed files with 110 additions and 6 deletions

View File

@@ -28,6 +28,7 @@ from imap_tools import MailboxFolderSelectError
from imap_tools import MailBoxUnencrypted
from imap_tools import MailMessage
from imap_tools import MailMessageFlags
from imap_tools import errors
from imap_tools.mailbox import MailBoxTls
from imap_tools.query import LogicOperator
@@ -266,7 +267,14 @@ def apply_mail_action(
M.folder.set(rule.folder)
action = get_rule_action(rule, supports_gmail_labels)
action.post_consume(M, message_uid, rule.action_parameter)
try:
action.post_consume(M, message_uid, rule.action_parameter)
except errors.ImapToolsError:
logger = logging.getLogger("paperless_mail")
logger.exception(
"Error while processing mail action during post_consume",
)
raise
ProcessedMail.objects.create(
owner=rule.owner,
@@ -570,13 +578,17 @@ class MailAccountHandler(LoggingMixin):
rule: MailRule,
supports_gmail_labels: bool,
):
self.log.debug(f"Rule {rule}: Selecting folder {rule.folder}")
folders = [rule.folder]
# In case of MOVE, make sure also the destination exists
if rule.action == MailRule.MailAction.MOVE:
folders.insert(0, rule.action_parameter)
try:
M.folder.set(rule.folder)
for folder in folders:
self.log.debug(f"Rule {rule}: Selecting folder {folder}")
M.folder.set(folder)
except MailboxFolderSelectError as err:
self.log.error(
f"Unable to access folder {rule.folder}, attempting folder listing",
f"Unable to access folder {folder}, attempting folder listing",
)
try:
for folder_info in M.folder.list():
@@ -588,7 +600,7 @@ class MailAccountHandler(LoggingMixin):
)
raise MailError(
f"Rule {rule}: Folder {rule.folder} "
f"Rule {rule}: Folder {folder} "
f"does not exist in account {rule.account}",
) from err