Настройка отправки писем в веб-приложениях – важный шаг в любом проекте. Если ты, как и я, не особо фанатеешь от сторонних сервисов (Gmail, Mailgun и т.д.), можно развернуть собственный SMTP-сервер с Postfix в Docker. В этой статье разберём, как это сделать.
Шаг 1: Подготовка окружения
Для начала, нужно убедиться, что у тебя настроен Docker и Docker Compose. Это must-have в мире современного девелопмента, особенно если ты, как и я, ценишь изоляцию сервисов и лёгкость деплоя.
Создаём Docker Compose файл или обновляем существующий:
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
environment:
- EMAIL_HOST=postfix
- EMAIL_PORT=25
- EMAIL_USE_TLS=False
- EMAIL_HOST_USER=
- EMAIL_HOST_PASSWORD=
depends_on:
- postfix
postfix:
image: catatnight/postfix
container_name: docdev-postfix-1
environment:
- maildomain=example.com
- smtp_user=user:password
ports:
- "25:25"
restart: always
Что здесь важно:
- postfix – сервис с образом Postfix, который будет обрабатывать отправку писем.
- maildomain – твой домен, например
example.com
. - smtp_user – это учётная запись для авторизации.
Шаг 2: Настройка Django
Теперь, когда контейнер Postfix настроен, нужно прикрутить его к нашему Django проекту. В settings.py
добавляем следующее:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'postfix'
EMAIL_PORT = 25
EMAIL_USE_TLS = False
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
DEFAULT_FROM_EMAIL = 'webmaster@example.com'
Здесь:
- EMAIL_HOST указываем как
postfix
, так как контейнер будет иметь это имя в сети Docker. - EMAIL_PORT - стандартный порт для SMTP без шифрования.
Шаг 3: Конфигурация Postfix с Yandex SMTP
Postfix можно настроить для пересылки писем через Yandex. В main.cf
(основной конфиг Postfix) нужно внести изменения. Для этого открываем контейнер с Postfix и редактируем файл:
docker exec -it docdev-postfix-1 /bin/bash
nano /etc/postfix/main.cf
Добавляем следующие строки:
relayhost = [smtp.yandex.ru]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
Теперь создаём файл с паролем для авторизации:
nano /etc/postfix/sasl_passwd
И вставляем туда:
[smtp.yandex.ru]:587 user@yandex.com:password
Далее обновляем файл паролей:
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
Перезапускаем Postfix:
service postfix restart
Шаг 4: Тестируем отправку писем
После того как всё настроено, самое время протестировать отправку писем в Django:
from django.core.mail import send_mail
send_mail(
'Тестовое письмо',
'Привет! Это тестовое письмо из Django через Postfix.',
'webmaster@example.com',
['receiver@example.com'],
fail_silently=False,
)
Если всё настроено правильно, письмо должно уйти без проблем.
Заключение
Теперь у тебя на сайте настроен собственный SMTP-сервер с Postfix, который работает через Docker. Это решение позволяет не зависеть от сторонних сервисов и полностью контролировать отправку писем в проекте.
Написать комментарий