Pos-исправление Docker django + host выдает "Неверный адрес почтового ящика назначения: адрес не распознается шлюзом`

Я пытаюсь убедить контейнеризированный django отправлять электронные письма, используя установку postfix на моем хосте, и мне говорят Bad destination mailbox address: Address not recognized by gateway.

( Для получения более подробной информации, приложение django, которое я запускаю, называется docker-zulip.)

Когда я отправляю электронное письмо для восстановления пароля, я ожидаю, что оно будет отправлено, но журнал моего сервера в контейнере (/var/log/zulip/server.log) сообщает:

2025-09-01 22:47:00.280 ERR  [zulip.send_email] Error sending password_reset email to ['User <user@gmail.com>'
]: {'User <user@gmail.com>': (550, b'5.1.1 Bad destination mailbox address: Address not recognized by gateway.
')}

Мне известно о сообщении SO Как вы настраиваете Django для отправки почты через Postfix?, и я использую его предписанные настройки. Но этот пост не посвящен настройкам docker, поэтому, похоже, требуется что-то еще.

Может ли хостинг отправлять электронные письма? Да

Я могу достаточно легко отправлять электронные письма с хостинга, используя echo "BODY" | mailx -r test@example.com -s "SUBJECT" user@gmail.com.

Настроен ли postfix на распознавание трафика из контейнера? Я думаю, что да

Я настроил /etc/postfix/main.cf таким образом, чтобы, как мне кажется, поддерживать мой контейнер docker (работающий на 172.18.0.100):

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.18.0.0/24
inet_interfaces =  172.17.0.1 172.18.0.1 172.23.0.1

...и я побежал systemctl restart postfix.

Однако

Я не вижу никакой активности в журналах хоста /var/log/mail.{err,log}.

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

В этом случае я могу получить этот адрес, выполняя команды на хосте (не в контейнере):

docker network ls | grep -oP '\w*zulip\w*' # => zulip_default
docker network inspect zulip_default | grep Subnet # => "Subnet": "172.18.0.0/24"
ip a | grep 172.18.0. # => inet 172.18.0.1/24 brd ...

Итак, с точки зрения моего контейнера, адрес моего хоста (на котором запущен postfix) равен 172.18.0.1.

Итак, я обновляю файл docker-compose.yml в моем docker-zulip, чтобы он содержал

SETTINGS_EMAIL_HOST = '172.18.0.1'
SETTINGS_EMAIL_PORT = 25
SETTINGS_EMAIL_HOST_USER = ''
SETTINGS_EMAIL_USE_TLS = False

Теперь при следующем запуске контейнера я смогу отправить zulip электронное письмо для восстановления пароля по электронной почте.

Вернуться на верх