Настройка отправки писем email в Django для mail, яндекс, gmail

22 сентября 2015 г. 20:49

В зависимости от того, какой smpt сервер хотим использовать для отправки писем с сайта, используем следующие настройки в settings.py:

mail.ru

EMAIL_HOST = 'smtp.mail.ru'
EMAIL_PORT = 2525
EMAIL_HOST_USER = "your@mail.ru"
EMAIL_HOST_PASSWORD = "password"
EMAIL_USE_TLS = True

gmail.com

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = "your@gmail.com"
EMAIL_HOST_PASSWORD = "password"
EMAIL_USE_TLS = True

yandex.ru

EMAIL_HOST = 'smtp.yandex.ru'
EMAIL_PORT = 465
EMAIL_HOST_USER = "your@yandex.ru"
EMAIL_HOST_PASSWORD = "password"
EMAIL_USE_SSL = True

Добавьте ещё две следующие строчки для отправки писем (трейсбека) админам при возникновении ошибок на сайте:

# settings.py
SERVER_EMAIL = EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

Яндекс и mail без указания SERVER_EMAIL такого же как адрес пользователя при подключении к SMPT серверу (который указывается в EMAIL_HOST_USER), не будет посылать письма об ошибках.

Отправить сообщение

Чтобы послать письмо нужно лишь в коде вызвать команду send_mail, например

from django.conf import settings
send_mail('Тема', 'Тело письма', settings.EMAIL_HOST_USER, ['to@example.com'])

Обратите внимание, что для предотвращения ошибки 501 sender address must match authenticated user нужно использовать адрес отправителя такой же, как EMAIL_HOST_USER (адрес пользователя при подключении к SMPT серверу). Более подробно об этой ошибки в статье: Error: SMTPRecipientsRefused 501 - sender address must match authenticated user

Оцените статью

4,5 из 5 (всего 6 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Права на использование материала, расположенного на этой странице http://vivazzi.pro/it/send-email-in-django/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.pro/it/send-email-in-django/">http://vivazzi.pro/it/send-email-in-django/</a>

Подробнее: Правила использования сайта

Комментариев: 2

Anton Emel
Anton Emel

13.09.2018 6:18 #

Подскажите, как сделать так чтоб настройки EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USE R и т.д. указывать в админке и при этом все работало?

Ответить

Артём Мальцев
Артём Мальцев автор

14.09.2018 23:50 #

Антон, посмотрите, как сделано в файле: /django/core/mail/backends/smtp.py

А именно вот эти строки:

self.host = host or settings.EMAIL_HOST
self.port = port or settings.EMAIL_PORT
self.username = settings.EMAIL_HOST_USER if username is None else username

И определить свой Бекэнд (можно как пример посмотреть у приложения post_office как сделано: /post_office/backends.py) как-то так:

from django.core.mail.backends.base import BaseEmailBackend

class EmailBackend(BaseEmailBackend):
    def __init__(self, host=None, port=None, username=None, password=None,
                 use_tls=None, fail_silently=False, use_ssl=None, timeout=None,
                 ssl_keyfile=None, ssl_certfile=None,
                 **kwargs):
        super(EmailBackend, self).__init__(fail_silently=fail_silently)

        my_mail = MailHost.objects.get(id=1)
        self.host = my_mail.host
        self.port = my_mail.port
        // и т. д.

В settings.py добавить EMAIL_BACKEND = 'my_app.EmailBackend'

Примерно так. Сам я ни разу не задавался такой задачей. Попробуйте, вышеприведённый код тоже не тестировал, но по идее должно работать. Оно будет работать если при отправки письма каждый раз инициализируется бекэнд, если же он только один раз при запуске проекта, то тут конечно думать надо уже конкретно код писать.

И в гугле сходу я не нашёл. Только вот https://stackoverflow.com/questions/15187697/django-sending-email-with-dynamic-smtp-settings/15187806 - но там просто отсылка на документацию на создание своего бекэнда без конкретного кода.

Ответить

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте