Найти тему

Установка и настройка Postfix для Django сайта с использованием Docker

Оглавление

Настройка отправки писем в веб-приложениях – важный шаг в любом проекте. Если ты, как и я, не особо фанатеешь от сторонних сервисов (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. Это решение позволяет не зависеть от сторонних сервисов и полностью контролировать отправку писем в проекте.Установка и настройка Postfix для Django сайта с использованием Docker