Django / Grade 1 / Send Email

Отправка писем

Прежде всего добавьте в settings.py вашего проекта:

# EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

В случае если вы хотите использовать отправку почты в тестовом режиме (в консоли), раскомментируйте первую строку.

Отправка почты в Django осуществляется с помощью send_mail, документация более-чем исчерпывающая.

Теперь перейдем к особенностям настройки отправки почты для разных почтовых служб.

Важный момент Раньше для отправки почты было необходимо указывать ваш пароль от ящика, теперь необходимо в настройках вашего почтового провайдера создать т.н. App Password, это сделано в целях безопасности. Если вы укажете пароль от вашей почты в send_mail(), то ничего не будет работать. Как это сделать для Mail.ruGmail и Яндекс.

Непосредственно настройки:

Gmail

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
EMAIL_HOST_USER = 'your@gmail.com'
EMAIL_HOST_PASSWORD = 'app_password'

Яндекс

EMAIL_HOST = 'smtp.yandex.ru'
EMAIL_PORT = 465
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
EMAIL_HOST_USER = 'your@yandex.ru'
EMAIL_HOST_PASSWORD = 'app_password'

Mail.ru

EMAIL_HOST = 'smtp.mail.ru'
EMAIL_PORT = 2525
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
EMAIL_HOST_USER = 'your@mail.ru'
EMAIL_HOST_PASSWORD = 'app_password'

Рекомендую хранить настройки в .env файле.

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

from django.core.mail import send_mail
from django.db.models.signals import post_save
from django.dispatch import receiver

# from celery import shared_task

from zayavki.models import Zayavka
from main.models import Realty, Manager

def send_email_to_manager(sender, instance, created, **kwargs):
if created:
manager_email = Manager.objects.get(id=instance.manager_id).email
subject = 'New zayavka'
message = f"новая заявка от {instance.name} / тема письма: {instance.question} / email отправителя: {instance.email}"
from_email = 'vetrof@yandex.ru'
recipient_list = [manager_email]
send_mail(subject, message, from_email, recipient_list)