Skip to main content

Template for email

Project description

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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mail_satvadev-1.0.10.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mail_satvadev-1.0.10-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file mail_satvadev-1.0.10.tar.gz.

File metadata

  • Download URL: mail_satvadev-1.0.10.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.1

File hashes

Hashes for mail_satvadev-1.0.10.tar.gz
Algorithm Hash digest
SHA256 aaf32cb9526bcb3934bc999ee2f9a74ff7046e09c6b2732ebee25508ced01e61
MD5 c2d5865493a2f1bbf4598d43a3b4073a
BLAKE2b-256 60df36fee948480fe1c7ac2857c1aee442c9a6656da7eb3876a98ccc41802a8b

See more details on using hashes here.

File details

Details for the file mail_satvadev-1.0.10-py3-none-any.whl.

File metadata

  • Download URL: mail_satvadev-1.0.10-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.1

File hashes

Hashes for mail_satvadev-1.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 95b7e93614328828e27994865d186d3a3814600c8ff4bc91500795ca9f425b5e
MD5 132ceaf9fc803ed7ec4a841f0d276488
BLAKE2b-256 1e8f921f492bdf38652e8af9aac1f5e011982b5efb3b43d86354098b8b7d9af9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page