L o a d i n g
Установка и настройка 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. Это решение позволяет не зависеть от сторонних сервисов и полностью контролировать отправку писем в проекте.

Написать комментарий

Вы можете оставить комментарий автору статьи Обязательные поля помечены *