Я использую легкий SMTP-сервер для обработки входящих писем. Я использую https://github.com/kennethreitz/inbox.py. Я открыл порт 25 в моем брандмауэре и запускаю сервер на 0.0.0.0:25.
Все работает так, как я ожидал. Когда я отправляю электронное письмо на адрес name@mydomain.com, сервер получает сообщение.
Что для меня странно, так это то, что когда я подключаюсь по telnet к порту 25 извне VPS, он не подключается и выходит из строя:
$ telnet mydomain.com 25
Trying <IP address removed>...
telnet: connect to address <IP address removed>: Operation timed out
telnet: Unable to connect to remote host
Когда я использую telnet изнутри VPS, он работает так, как должен:
$ telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 hobnob Python SMTP proxy version 0.2
Я не могу придумать ни одной причины, почему это происходит. Что бы это могло быть?
ОБНОВИТЬ:
Мне удалось установить соединение с помощью оболочки Python:
from smtplib import SMTP
conn = SMTP('mydomain.com')
Я подтвердил, что это не удастся, если сервер не работает. Кажется, что телнет не может правильно установить соединение? Я не уверен, но ясно, что подключение к серверу может быть выполнено с помощью программного обеспечения электронной почты, которое я действительно пытался проверить.
Причин тому немало.
Возможно, ваш VPS-провайдер заблокировал 25-й порт. Многие потребуют, чтобы вы специально попросили открыть его, чтобы сократить количество спама.
Кроме того, ваш брандмауэр может блокировать входящий трафик порта 25. Избавьтесь от этого.
Другая распространенная вещь - это прослушивание только на localhost, хотя, поскольку вы установили 0.0.0.0 в качестве адреса привязки, это не должно быть проблемой.
Часто входящая почта будет поступать через какой-либо другой порт (в частности, отправка на порт 587), поэтому вы все равно можете получать почту с заблокированным портом 25.
Вы проверили записи MX DNS для "mydomain.com"? Например:
dig +short mydomain.com MX
Сделайте эту проверку как внутри, так и за пределами вашего VPS: результаты могут отличаться.
Ваш VPS-провайдер может организовать входящую внешнюю электронную почту через свои центральные почтовые серверы ретрансляции. Это позволяет им устанавливать защиту от вредоносных программ и других злоупотреблений от имени пользователей. (Он также может допускать и другие вещи, но именно для этого предназначено шифрование электронной почты.) После того, как почта прошла через сервер провайдера, она будет автоматически перенаправлена в вашу систему.
Если такая система ретрансляции была настроена, то прямой доступ к 25 порту вашего VPS из Интернета мог быть заблокирован.
Python smtplib может быть достаточно умен, чтобы автоматически проверять записи MX и автоматически подключаться к указанному серверу (-ам) ретрансляции, а не напрямую к вашему собственному серверу. Telnet определенно не будет.