integrated the new consumer with the mail client.

This commit is contained in:
Jonas Winkler 2020-11-17 00:57:55 +01:00
parent 24bb8c71c9
commit a93088843f

View File

@ -1,8 +1,11 @@
import email import os
from datetime import datetime, timedelta, date import tempfile
from email.parser import BytesParser from datetime import timedelta, date
from django.conf import settings
from django.utils.text import slugify from django.utils.text import slugify
from django_q.tasks import async_task
from imap_tools import MailBox, MailBoxUnencrypted, AND, MailMessageFlags from imap_tools import MailBox, MailBoxUnencrypted, AND, MailMessageFlags
from documents.models import Correspondent from documents.models import Correspondent
@ -117,7 +120,10 @@ def handle_message(message, rule):
"slug": slugify(corerspondent_name) "slug": slugify(corerspondent_name)
})[0] })[0]
elif rule.assign_correspondent_from == MailRule.CORRESPONDENT_FROM_NAME: elif rule.assign_correspondent_from == MailRule.CORRESPONDENT_FROM_NAME:
corerspondent_name = message.from_values.name if message.from_values and message.from_values.name else message.from_ corerspondent_name = message.from_values['name'] \
if (message.from_values and
'name' in message.from_values and
message.from_values['name']) else message.from_
correspondent = Correspondent.objects.get_or_create( correspondent = Correspondent.objects.get_or_create(
name=corerspondent_name, defaults={ name=corerspondent_name, defaults={
"slug": slugify(corerspondent_name) "slug": slugify(corerspondent_name)
@ -146,4 +152,21 @@ def handle_message(message, rule):
"'{}'." "'{}'."
.format(att.filename, title, correspondent, tag, doc_type)) .format(att.filename, title, correspondent, tag, doc_type))
os.makedirs(settings.SCRATCH_DIR, exist_ok=True)
_, temp_filename = tempfile.mkstemp(prefix="paperless-mail-", dir=settings.SCRATCH_DIR)
with open(temp_filename, 'wb') as f:
f.write(att.payload)
async_task(
"documents.tasks.consume_file",
file=temp_filename,
original_filename=att.filename,
force_title=title,
force_correspondent_id=correspondent.id if correspondent else None,
force_document_type_id=doc_type.id if doc_type else None,
force_tag_ids=[tag.id] if tag else None
)
return True return True