Skip to main content

Django приложение шаблона письма email с поддержкой отправки через Celery task

Конфигурация

Подключение приложения

INSTALLED_APPS = [
    'mail_satvadev',
]

Использование базового класса шаблона письма

Для использования необходимо переопределить абстрактные свойства класса:

    @property
    @abc.abstractmethod
    def title(self):
        """Тема письма"""
        pass

    @property
    @abc.abstractmethod
    def template(self):
        """Шаблон письма"""
        pass

Для динамического формирования содержимого поддерживается подстановка значений в текстовый шаблон с требуемым форматированием.

Данные контекста в формате словаря передаются в конструктор при инициализации класса, и могут быть обработаны и преобразованы в переопределяемом методе

    _prepare_context(self, **kwargs)

по-умолчанию метод возвращает переданные kwargs без изменения.

Форматирование и подстановка контекста в текстовый шаблон может быть произведена в переопределяемом методе

    _generate_text(self, context)

по-умолчанию метод подставляет данные контекста в шаблон template.

Базовый класс поддерживает подстановку стандартного окончания в содержимое шаблона. Завершающий текст задается через свойство

    @property
    def footer(self):
        """Стандартное окончание письма"""

по-умолчанию - пустая строка.

Проверка формата электронной почты получателей письма

Поддерживается валидация списка получателей письма на корректность формата адресов электронной почты.

from mail_satvadev.filters import RecipientFilter


validator = RecipientFilter()
emails = validator.filter_emails(emails)  # Только корректные адреса email

Отправление письма получателем через Celery task

Для отправки письма через Celery task в файле настроек проекта settings.py должны быть прописаны

# Почта отправителя
EMAIL_HOST_USER=my.smtp.provider@.email.com
# Максимальное кол-во повторных попыток отправки
CELERY_MAX_RETRIES_COUNT=3

Отправление письма

  • subject - тема письма
  • emails_list - список электронных адресов получателей
  • text - содержимое письма в текстовом формате

опционально

  • параметр backoff - для повторных отправлений в случае неудачи (по алгоритму exponential backoff), по-умолчанию не задан.
from mail_satvadev.tasks import send_email

subject = `Тема письма`
emails_list = ['admin@example.com', 'user@example.com']
text = 'Содержимое письма'
send_email.delay(subject, emails_list, text, backoff)

Примеры использования

Письмо с проверочным кодом сброса пароля

from mail_satvadev.messages import BaseMail


class ResetPasswordMail(BaseMail):
    """Письмо с проверочным кодом сброса пароля"""
    subject = '<ERP SatvaSpace> Сброс пароля'
    template = r'Проверочный код: {code}'
    
<...>

from authentication.mail import ResetPasswordMail
from mail_satvadev.tasks import send_email


class ResetPasswordView(APIView):
    def post(self, request):
        <...>
        code = SystemRandom().randint(100000, 999999)
        mail = ResetPasswordMail(code=code)
        send_email.delay(mail.subject, ['user@example.com'], mail.text)

Письмо-напоминание

class BirthdayNotificationMail(BaseMail):
    """Письмо напоминание о днях рождения"""
    subject = 'Дни рождения'
    template = ''

    def __init__(self, birthdays: list[tuple[str, str]], **kwargs) -> None:
        self.template = self._get_template(birthdays)
        super().__init__(**kwargs)

    @staticmethod
    def _get_template(lines: list[str]) -> str:
        string = ''
        for line in lines:
            string += f'День рождения {line[0]} у сотрудника {line[1]} \n'
        return string.rstrip()
        
<...>       

from birthday_notification.mail import BirthdayNotificationMail
from mail_satvadev.tasks import send_email


def send_reminders():
    birthdate_list = []
    mail = BirthdayNotificationMail(birthdate_list)
    send_email.delay(mail.subject, ['user@example.com'], mail.text, 40)

Metadata

Release files for mail-satvadev 1.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mail-satvadev 1.0.10
File Size Uploaded Provenance
mail_satvadev-1.0.10.tar.gz 4.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mail-satvadev 1.0.10
File Interpreter ABI Platform
mail_satvadev-1.0.10-py3-none-any.whl Python 3 none any Details

Total release size: 10.7 kB

Release files / mail_satvadev-1.0.10.tar.gz

Download URL mail_satvadev-1.0.10.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
aaf32cb9526bcb3934bc999ee2f9a74ff7046e09c6b2732ebee25508ced01e61
BLAKE2b-256 checksum
How to use checksums
60df36fee948480fe1c7ac2857c1aee442c9a6656da7eb3876a98ccc41802a8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.1

Release files / mail_satvadev-1.0.10-py3-none-any.whl

Download URL mail_satvadev-1.0.10-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95b7e93614328828e27994865d186d3a3814600c8ff4bc91500795ca9f425b5e
BLAKE2b-256 checksum
How to use checksums
1e8f921f492bdf38652e8af9aac1f5e011982b5efb3b43d86354098b8b7d9af9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.1

Security for mail-satvadev 1.0.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page