Назад | Перейти на главную страницу

Отправка электронной почты по SMTP IIS7.5 через сайт php

После того, как моя компания решила изменить сайт, мы перешли со старого сайта 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? Что мне нужно сделать для моего файла 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/)