Почему эта ошибка PHP ссылается на локальный хост?

Я запускаю 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() показало мне, какой файл конфигурации был загружен, и я отредактировал правильный. Теперь работает! Спасибо всем за вашу помощь.


person Nathan Long    schedule 13.08.2009    source источник
comment
Вы используете другой почтовый сервер, такой как Mercury, который поставляется с xampp на одной из машин?   -  person markus    schedule 14.08.2009
comment
это все еще дает мне ад .... вы можете указать, как вы настроили свои настройки smtp на iis? особенно те, которые вам пришлось изменить, чтобы это заработало?   -  person CheeseConQueso    schedule 24.08.2009
comment
@CheeseConQueso - я вообще не связывался с IIS. Apache (поставляемый с XAMPP) — это веб-сервер; он использует файл php.ini в своем каталоге \bin для управления выполнением PHP-кода. В этом случае в конфигурационном файле должны были быть правильно указаны параметры PHP-функции mail().   -  person Nathan Long    schedule 25.08.2009
comment
Хотел бы я использовать Apache... с его помощью установка проще... Спасибо за разъяснения в любом случае   -  person CheeseConQueso    schedule 27.08.2009


Ответы (3)


Вы должны добавить вызов phpinfo() на свою страницу и проверить, что:

  • Ваш скрипт PHP использует правильный php.ini
  • Убедитесь, что настройки SMTP ini (как показано в таблицах phpinfo) верны.
person too much php    schedule 14.08.2009

Попробуйте использовать это в коде на сервере:

ini_set("SMTP","smtp.example.com" );
ini_set('sendmail_from', '[email protected]'); 
person Juicy Scripter    schedule 13.08.2009

Мне тоже пришлось это сделать - вам нужно отправить sendmail.ini:

Ваш файл sendmail.ini должен находиться в папке C:\xampp\sendmail\sendmail.ini.

Здесь вам нужно заботиться только о трех переменных:

1.smtp_server
2.auth_username
3.auth_password

Подробности здесь: Отправить почту и xampp< /а>

Билл Х

person Bill H    schedule 14.08.2009