Установка и настройка почтового сервера
В данном гайде будет использован бесплатный почтовый сервер 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-приложения будет работать через ваш почтовый сервер!