Свежая установка Discourse/Docker не отправляет письма

Всем привет,
Я хочу перенести давно существующий форум с phpBB3 на Discourse. Мне удалось настроить Docker, и я получил доступ к начальной настройке. К сожалению, письма не отправляются, поэтому я не могу завершить инициализацию.

Я провёл отладку, но не смог найти причину, поэтому обращаюсь к вам за помощью.

Моя конфигурация следующая: я настроил apache2 как обратный прокси для Docker, и это работает. Мой почтовый сервер — это mailcow в Docker на той же машине. Почтовый сервер тщательно протестирован и работает стабильно ежедневно через SMTP с STARTTLS на порту 587 и через веб-почту.

Конфигурация в моём файле app.yml выглядит так:

  DISCOURSE_SMTP_ADDRESS: mail.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: discourse@example.com
  DISCOURSE_SMTP_PASSWORD: "password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)
  #DISCOURSE_SMTP_DOMAIN: mail.example.com
  DISCOURSE_NOTIFICATION_EMAIL: discourse@example.com

При запуске ./discourse-doctor я получаю:

==================== ТЕСТ ПИСЬМА ====================
Для надёжного теста получите адрес на http://www.mail-tester.com/
Или просто отправьте тестовое письмо себе.
Адрес электронной почты для теста? ('n' чтобы пропустить) [admin@example.com]: 
Отправка письма на admin@example.com. . . 
Проверка отправки на admin@example.com через mail.example.com:587, пользователь: discourse@example.com с обычной аутентификацией.
 =======================================  
ОШИБКА 
 ========================================
                                   НЕОЖИДАННАЯ ОШИБКА

Невозможно назначить запрошенный адрес - connect(2) для [правильный IPv6]:587

====================================== 
РЕШЕНИЕ 
=======================================
Это не распространённая ошибка. Рекомендуемого решения не существует!

Пожалуйста, сообщите точное сообщение об ошибке выше на https://meta.discourse.org/
(И решение, если вы его найдёте!)

Не найдя в интернете людей с аналогичными сообщениями об ошибках, я обратился к этой теме.
Я легко смог подключиться к почтовому серверу с помощью telnet извне контейнера.

Что я попробовал внутри контейнера:

getent hosts mail.example.com

вернул правильный IPv6-адрес.
Но затем начали появляться ошибки:

openssl s_client -connect mail.example.com:587 -starttls smtp
140124593714496:error:0200206E:system library:connect:Connection timed out:../crypto/bio/b_sock2.c:110:
140124593714496:error:2008A067:BIO routines:BIO_connect:connect error:../crypto/bio/b_sock2.c:111:
connect:errno=110
openssl s_client -6 -connect "[правильный IPv6]:587" -starttls smtp
139918557709632:error:02002063:system library:connect:Cannot assign requested address:../crypto/bio/b_sock2.c:110:
139918557709632:error:2008A067:BIO routines:BIO_connect:connect error:../crypto/bio/b_sock2.c:111:
connect:errno=99
 openssl s_client -connect smtp.gmail.com:587 -starttls smtp

работает отлично.
Когда я пытаюсь выполнить

openssl s_client -connect mail.example.com:587 -starttls smtp

извне контейнера, всё работает тоже отлично.
В логах my mailcow/postfix ничего нет…
Я в тупике. Можете подсказать, куда смотреть дальше?

См. Устранение неполадок с электронной почтой при новой установке Discourse.

Проблема, скорее всего, в том, что адрес электронной почты для уведомлений не совпадает с тем, который настроен на вашем почтовом сервере для отправки.

Но это не объясняет ошибки «connection timed out» (превышено время ожидания подключения). Похоже, это проблема сети Docker.

Спасибо за ваш ответ. Я попробовал использовать один и тот же адрес в обоих полях, но изменений нет, ошибка та же.
Следуя теме по устранению неполадок:

Что говорят логи Discourse?

`Job exception: Cannot assign requested address - connect(2) for [correct IPv6]:587

Что говорят логи вашего почтового провайдера?

Нет записей в логах, связанных с письмами, отправленными из Discourse.

Затем я попробовал этот метод https://www.saotn.org/test-smtp-authentication-starttls/, чтобы проверить, смогу ли я пройти аутентификацию через openssl. Это работает нормально с сервера, но не изнутри контейнера; там возникает ошибка, которую я описал в первом сообщении.

Как можно узнать, что блокирует соединение здесь?

О боже, это было так просто.
Мне нужно было просто включить IPv6 в моей сети Docker — достаточно первых трёх шагов из этого руководства, и всё заработало.