После того, как моя компания решила изменить сайт, мы перешли со старого сайта ASP.NET на новый сайт, созданный на Drupal (php). Сайт работает локально на IIS7.5, и у нас также есть виртуальный SMTP-сервер на 25-м порту.
Проблема в том, что электронная почта не может быть отправлена на новый веб-сайт (старый сайт отправляет электронную почту. Я точно не знаю, как). Проблема не связана с Drupal, потому что даже с помощью простейшего PHP-скрипта невозможно отправить почту.
Служба SMTP, похоже, работает на TCP-порту 25 (проверено командой netstat) но когда я пытаюсь
telnet localhost 25
Я получаю это сообщение:
Could not open connection to the host, on port 25: Connect failed
Это сообщение об ошибке было таким же, когда я бегал telnet 127.0..0.1 25
и telnet MERCURY 25
Я создал новый сервер VSMTP на другом порту (28), а также настроил утвержденное реле и некоторые другие параметры.
telnet localhost 28
возвращает пустую страницу (после нажатия любой кнопки я возвращаюсь к началу) telnet 127.0.0.1 28
возвращает пустую страницу, ноКогда я пробую `telnet MERCURY 28 **, наконец, сообщение, которое я ожидал
220 predrag Microsoft ESMTP MAIL Service, Version: 7.5.7600.16601 ready at Fri, 3 Oct 2014 10:29:01 +0200
Что здесь происходит? В чем разница между этими командами telnet? Что мне нужно сделать для моего файла PHP.Ini, чтобы я мог отправлять электронную почту с веб-сайта php? Я пробовал много разных вариантов, но ни один из них не работает.
Также из конфигурации у нас есть антивирус McAfee, брандмауэр Windows с открытыми портами, версия php 5.2, Windows Server 2008 R2 и имя моего компьютера MERCURY.
Возможно, конфигурация SMTP в вашем PHP.INI неверна. Проверь это. И убедитесь, что вы редактируете файл, который загружает IIS. Иногда это может сбивать с толку.
ОДНАКО - Если вы можете немного изменить код ...
Я обнаружил, что отправлять транзакционные сообщения с моих веб-сайтов намного проще с помощью веб-службы, например Штемпель, Amazon SES или SendGrid. Вам не нужно обезьянничать с портом 25 или брандмауэрами. Ваши блоки разработки и тестирования могут использовать тот же код и службу, что и ваши производственные системы. И на любом из серверов меньше нужно настраивать - ни SMTP-сервера, ни дополнительных портов.
Ой. И я упоминал, что вам вообще не нужен доступ к порту 25 (или любому SMTP)? Вы можете использовать одну из веб-служб через обычный HTTPS для отправки почты; как и любой другой веб-сервис.
Просто убедитесь, что вы используете разные ключи API для ваших систем разработки, тестирования и производства. И не проверяйте ключи API или пароли в системе контроля версий.
Для службы, не работающей на порту 25, это может быть либо то, что служба была настроена, но на самом деле не запущена, либо что-то (антивирус или локальный брандмауэр?) Препятствует доступу на порт 25 (здесь у нас McAfee VirusScan и одна из его функций на самом деле блокирует не указанные в списке приложения для подключения к чему-либо на порту 25 ...). Установлено ли у вас локально антивирус или другое программное обеспечение безопасности? Вы пытались перезапустить (SMTP-сервер или сам компьютер)? Проверяли ли вы журнал запуска службы SMTP (при настройке на порт 25) на предмет ошибок запуска?
Для службы, работающей только с MERCURY (имя компьютера) на порту 28, а не с 127.0.0.1, похоже, что служба привязана только к сетевому интерфейсу, а не к петлевому. Это должно быть изменено в конфигурации вашей службы SMTP, но если вы не найдете для этого никакой опции, вы можете просто настроить PHP на использование MERCURY вместо 127.0.0.1 в качестве сервера (хотя, если сервер предназначен только для локального использования , это было бы намного лучше связать это только к интерфейсу обратной связи, поэтому к нему нельзя получить доступ из сети - как правило, рекомендуется избегать раскрытия неиспользуемой службы в качестве хорошей практики, чтобы избежать проблем с безопасностью). Вы добавляли 127.0.0.1 в список доступа? (Проверьте пункт 15 здесь: http://www.vsysad.com/2012/04/setup-and-configure-smtp-server-on-windows-server-2008-r2/)