Я запускаю XAMPP на своей локальной машине и на сервере в офисе. Обе машины Windows.
Я пишу код, который использует mail()
для отправки электронной почты из формы. По умолчанию он использует sendmail.exe
(который поставляется с XAMPP) для отправки электронной почты. Во всех случаях почта фактически отправляется через третью машину, которая является сервером Exchange.
С моей локальной машины PHP может нормально отправлять почту. На сервере при отправке формы я получаю эту ошибку:
Предупреждение: mail() [function.mail]: не удалось подключиться к почтовому серверу через порт 25 «localhost», проверьте настройки «SMTP» и «smtp___port» в php.ini или используйте ini_set() в
... за которым следует мое имя файла.
Я не понимаю, почему он ссылается на "localhost". Нигде в php.ini или sendmail.ini не используется "localhost" - я использую имя почтового сервера. Информация SMTP, используемая на обеих машинах, одинакова.
Насколько я могу судить, у этих двух сред есть все важное общее:
- Файлы php.ini идентичны
- Файлы sendmail.ini идентичны
- На обеих машинах установлена одна и та же версия XAMPP.
- Один и тот же пакетный скрипт будет работать на обеих машинах и успешно отправлять электронную почту через
sendmail.exe
.
Я несколько раз останавливал и запускал Apache, чтобы убедиться, что он использует обновленные файлы конфигурации.
Когда я получаю указанную выше ошибку, я замечаю, что файл журнала sendmail.exe не создается, что заставляет меня думать, что он никогда не запускался.
Что мне не хватает?
Решено
Моя проблема заключалась в том, что я думал, что он использует c:\xampp\php\php.ini
, но на самом деле он использовал c:\xampp\apache\bin\php.ini
. Это должно было быть очевидно, и я ранее редактировал правильный файл на своей локальной машине, но как-то запутался при внесении изменений на сервере.
Использование php_info()
показало мне, какой файл конфигурации был загружен, и я отредактировал правильный. Теперь работает! Спасибо всем за вашу помощь.