PHP функция «mail ()» отправляет почту из php5 cli, но не тогда, когда скрипт запускается браузером - PullRequest
2 голосов
/ 22 декабря 2011

Я настроил свой сервер для отправки почты, установив "sendmail_path = "/usr/sbin/sendmail" в "/etc/php5/apache2/php.ini", и sendmail установлен на сервере.

Когда я запускаю этот скрипт или любой его вариант из php5 через cli, почта отправляет просто отлично, но когда у меня браузер запускает его, то есть Chrome или Firefox, он каждый раз дает сбой.

<?php
 $to = "notreal@email.com";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";
 if (mail($to, $subject, $body)) {
   echo("<p>Message successfully sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
?>

Я использую пакет "php5-cli" для интерпретатора командной строки.

Другие веб-приложения на основе PHP, использующие функцию PHP «mail ()», также не отправляют почту.

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

Apache и CLI, похоже, используют разные конфигурации в вашей настройке.

Сравните конфигурацию в /etc/php5/cli/php.ini с вашим Apache php.ini. Возможно, что-то не работает с конфигурацией sendmail для Apache PHP, и конфигурация CLI верна.

1 голос
/ 22 декабря 2011

Когда вы запускаете php из cli, он запускается под учетной записью, в которую вы вошли в linux.Когда вы запускаете из Apache, php запускается как пользователь, под которым работает Apache, обычно «nobody»

Может быть несколько причин, по которым почта от «nobody» выходит из строя - некоторые фильтры нежелательной почты отклоняют ее.

Кроме того, я не уверен, что вы подразумеваете под «неудачами» - просто не полученное сообщение электронной почты не означает, что оно не было отправлено.Вы должны проверить свой почтовый журнал, обычно в / var / log / maillog, и сразу после запуска скрипта из браузера проверьте последние несколько строк в этом журнале, наберите

# tail -20 /var/log/maillog

и посмотрите, сможете ли вы найтиэлектронная почта либо отправлена, либо отклонена.Также подождите пару минут и проверьте этот журнал еще раз - ваш исходный адрес электронной почты может возвращаться как отклоненный с какого-либо почтового сервера, он будет содержать объяснение того, почему он был возвращен

1 голос
/ 22 декабря 2011

Сначала вам нужно убедиться, что текущая настройка соответствует вашей:

var_dump(ini_get('sendmail_path'));

Если в Web и CLI все по-другому, возможно, PHP - это разные файлы php.ini. Запустите это:

phpinfo(INFO_GENERAL);

... и найдите эту часть (ваши значения будут отличаться от моих):

Configuration File (php.ini) Path => C:\Windows
Loaded Configuration File => C:\Program Files\PHP\php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)

Это поможет вам определить файл php.ini, который нужно отредактировать.

(Как ни странно, странно, что это неправильно настроено на сервере Linux.)

...