mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from email import message_from_bytes
|
|
from pathlib import Path
|
|
|
|
from django.conf import settings
|
|
from django.core.mail import EmailMessage
|
|
from filelock import FileLock
|
|
|
|
|
|
def send_email(
|
|
subject: str,
|
|
body: str,
|
|
to: list[str],
|
|
attachment: Path | None = None,
|
|
attachment_mime_type: str | None = None,
|
|
) -> int:
|
|
"""
|
|
Send an email with an optional attachment.
|
|
TODO: re-evaluate this pending https://code.djangoproject.com/ticket/35581 / https://github.com/django/django/pull/18966
|
|
"""
|
|
email = EmailMessage(
|
|
subject=subject,
|
|
body=body,
|
|
to=to,
|
|
)
|
|
if attachment:
|
|
# Something could be renaming the file concurrently so it can't be attached
|
|
with FileLock(settings.MEDIA_LOCK), attachment.open("rb") as f:
|
|
content = f.read()
|
|
if attachment_mime_type == "message/rfc822":
|
|
# See https://forum.djangoproject.com/t/using-emailmessage-with-an-attached-email-file-crashes-due-to-non-ascii/37981
|
|
content = message_from_bytes(f.read())
|
|
|
|
email.attach(
|
|
filename=attachment.name,
|
|
content=content,
|
|
mimetype=attachment_mime_type,
|
|
)
|
|
return email.send()
|