Установка и настройка почтового сервера
В данном гайде будет использован бесплатный почтовый сервер Stalwart в виде докер-образа, но никто не мешает взять любой другой.
Дальше по тексту я буду использовать следующие "плейсхолдеры":
yourserver.com
- домен вашего сервера. Поменяйте на свой.87.XXX.YYY.ZZZ
- IP-адрес вашего сервера. Поменяйте на свой.{{your_django_app_name}}
- название вашего django-приложения. Не проекта, а именно приложения!
Предустановки
Я предполагаю, что у вас на сервере уже установлены docker
и docker compose
самой свежей версии.
Также нам потребуется swaks
- консольный клиент для проверки отправки почты.
Bash | |
---|---|
1 |
|
Для создания сертификатов нам также потребуется certbot
.
Bash | |
---|---|
1 |
|
Установка Stalwart
- Создаём каталог, где будем хранить конфиги нашего почтового сервера, например:
Bash | |
---|---|
1 2 |
|
- Добавляем в этот каталог файл
docker-compose.yaml
со следующим содержимым:
YAML | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
В официальной документации предлагается запускать Stalwart командой docker run
, что не всегда удобно, т.к. для изменения конфигурации приходится менять команду, поэтому я предпочитаю вариант с использованием docker-compose.yaml
.
- Запускаем сервисы.
Bash | |
---|---|
1 |
|
- Переходим в официальную документацию и следуем дальше уже по ней https://stalw.art/docs/install/platform/docker/
Настройка Stalwart
- Переходим на http://87.XXX.YYY.ZZZ:18080 и проходим первоначальную настройку.
- На этом этапе я предполагаю, что вы уже самостоятельно настроили DNS записи по туториалу и
mail.yourserver.com
выдаёт корректный IP адрес.
Bash | |
---|---|
1 2 |
|
-
Также не забудьте настроить PTR-запись у своего VPS/VDS/Bare-metal провайдера. Некоторые почтовые провайдеры (такие как Gmail) не принимают письма от почтовых серверов без PTR-записи.
Обратитесь к нему с запросом: "Установите PTR-запись для IP 87.XXX.YYY.ZZZ на mail.yourserver.com" Проверить успешную установку записи можно командой:
Bash 1 2
dig -x 87.XXX.YYY.ZZZ +short mail.yourserver.com.
-
Теперь, когда наш почтовый домен резолвится по DNS, мы можем сгенерировать TLS-сертификаты.
Bash | |
---|---|
1 |
|
Забираем их из каталога /etc/letsencrypt/live/mail.yourcerver.com
.
Там должны лежать сгенерированные certbot файлы. Нас интересуют в первую очередь:
fullchain.pem
- CA+Certificate.privkey.pem
- Certificate private key.
Переходим в панель управления Stalwart - http://87.XXX.YYY.ZZZ:18080/settings/certificate и создаём новый сертификат.
В появившейся форме:
-
Certificate Id
- пишем любое понятное вам название, желательно разделяя слова нижним подчёркиванием. Неплохой пример Certificate Id:mail_yourserver_com_letsencrypt_cert_default
-
Certificate
: Сюда копируем весь вывод команды
Bash | |
---|---|
1 |
|
Private Key
: Сюда копируем весь вывод команды
Bash | |
---|---|
1 |
|
Default certificate
: Если у нас один единственный сертификат на почтовый сервер - включаем.
После чего нажимаем кнопку Save & Reload
и все изменения у нас автоматически применяются.
Проверка отправки почты
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
Если после выполнения команды у вас пришло письмо от [email protected]
на ваш почтовый ящик [email protected]
- почтовый сервер работает.
Бонус: Настройка DJANGO проекта на отправку почты с вашего почтового сервера
Добавьте в settings.py
вашего проекта следующие строки:
Python | |
---|---|
1 2 3 4 5 6 7 |
|
Внимание!
Я не рекомендую вам явно прописывать все значения в settings.py
. Вместо этого воспользуйтесь готовым решением типа django-configurations
и загружайте значения для этих переменных из dotenv-файла.
Также создайте в любом из ваших django apps следующий файл:
Bash | |
---|---|
1 2 3 4 |
|
Со следующим содержимым:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
Теперь вся отправка почты Django-приложения будет работать через ваш почтовый сервер!