PHP (как много других приложений) имеет ряд папок, где он ищет конфигурационный файл, зарегистрированный в руководство.
Команда 503 AUTH, используемая, когда не объявлена
, по существу объясняет сама себя, она не предлагала клиенту возможность использовать команду AUTH
. Скорее всего, это связано с тем, что клиент использовал HELO
, а не EHLO
(который, я хотел бы отметить, вы использовали при выполнении теста telnet).
Аутентификация SMTP является частью расширенного SMTP, который запускается командой EHLO
; "старый добрый" SMTP не поддерживает аутентификацию, поэтому технически это недопустимая команда, хотя некоторые SMTP-серверы все еще позволяют ее.
Лучшее возможное решение - указать вашей программе использовать расширенный SMTP ( EHLO
]) если возможно, в противном случае может быть команда exim, которая заставит его разрешить AUTH для соединений типа HELO
.
** UPDATE **
Согласно этому сообщению здесь: http: // www. exim.org/lurker/message/20040901.063858.126f66ac.en.html
EHLO (не HELO) должен быть предоставлен клиентом перед AUTH.
То есть команда AUTH не могла использоваться, если не было объявлено (через EHLO, согласно auth_advertise и т. Д.). Это поведение было жестким в Exim 4.20, и это не вариант.
Похоже, вам нужен другой MTA, если ваше приложение не может выполнить EHLO
. Или вы требуете аутентификацию , можете ли вы сделать то же самое, используя ACL на основе IP?
ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ
У Exim есть решение для этого, используя allow_auth_unadvertised
как описано здесь , вы можете сделать что-то вроде этого:
hosts = *
control = allow_auth_unadvertised
У меня была аналогичная проблема. Это сообщение может появиться, даже если используется EHLO, когда на сервере работает Exim.
В WHM> Домашняя страница> Конфигурация службы> Менеджер конфигурации Exim, опция « Требовать от клиентов подключения с помощью SSL или выполнить команду STARTTLS перед им разрешена аутентификация на сервере "было установлено значение по умолчанию (Вкл.). Я не уверен, сделал ли я это или нет, и обычно это отличная идея для безопасности, но заставляет почтовый сервер включать (рекламировать) только команду STARTTLS, а не AUTH. Поэтому, когда мой сценарий отправляет AUTH, сервер отправляет правильное сообщение об ошибке. Дополнительная информация находится на http://blog.networkpresence.co/?p=8923 . Когда-нибудь, когда у меня будет время, я узнаю, как изменить свой сценарий для использования TLS, чтобы я мог включить эту опцию Exim в целях безопасности.
ДОБАВЛЕНО 19/11/19:
Я нашел, как изменить свой локальный Скрипт "send email" для использования TLS, и я снова изменил свой сервер на использование TLS или STARTTLS.
Почему я это сделал?
Потому что некоторые веб-сайты, которые я использую, требуют защищенных почтовых серверов при отправке уведомлений по электронной почте. Я чертовски долго пытался понять, почему они продолжали жаловаться на мой адрес электронной почты: это потому, что мой почтовый сервер принимал небезопасные соединения!
Подумав об этом дальше, я понял, что все веб-операции должны быть безопасными (это основная идея за проектом Let's Encrypt, который первым предоставил бесплатные сертификаты безопасности, которые обновляются автоматически).
Необходимо внести два изменения в приложение PHP для «отправки электронной почты», которое использует функцию fsockopen, чтобы изменить его с небезопасного на безопасное соединение с почтовым сервером (это устранит сообщение об ошибке 503 правильным способом):
Измените аргумент порта fsockopen с 25 на 465.
Измените схему аргументов хоста fsockopen с (пусто) на ssl: //. Итак, если хост был «mail.example.com», измените его на «ssl: //mail.example.com».
Также может потребоваться включить строку «LoadModule ssl_module modules / mod_ssl.so» в файле httpd.conf (для локальных серверов Apache)или внесите другие локальные изменения, чтобы заставить работать PHP-транспорт в Интернете. Я не уверен в этом. Только эти два изменения сразу подействовали на меня.