php mail () возвращает false, но не в командной строке

Я смотрел вокруг stackoverflow и многих других сайтов для идей, но до сих пор ничего не работало, и мне нужна более непосредственная помощь.

У меня есть выделенный Ubuntu Server (9.04 jaunty), и я запускаю несколько веб-сайтов PHP с apache2. Моя проблема в том, что функция mail () перестала работать. Через некоторое время я использую PEAR Mail Queue для большинства электронных писем, поэтому я не уверен точно, когда mail () перестала работать, но я все еще нуждаюсь в ней для установки OpenCart, среди нескольких других вещей, но mail () возвращает false, независимо от того, что я делаю. Даже этот простой код не будет работать:

<?php mail('mail@example.com','test','test'); ?> 

Итак, я смотрел настройки Sendmail в php.ini, которые все проверяют, и когда я запускаю это в командной строке, он отлично работает и отправляет мне электронное письмо:

 # sendmail mail@example.com test message 

Поэтому я подумал, что это может быть проблема с php, поэтому я пробую следующую команду:

 # php -r "mail('mail@example.com','test','test');" 

И он также отправляет письмо без каких-либо проблем! Так что же это может быть? Я начал думать, что это может быть проблема разрешения, возможно, у www-data возникли проблемы с запуском скрипта. Все еще не уверен в этом, потому что я даже не могу запустить этот скрипт:

 <?php echo exec('whoami'); ?> 

Он также возвращает false! Я запустил команду visudo и добавил на всякий случай следующую строку:

 www-data ALL=(ALL) ALL 

И я изменил пользователей и владельцев групп файлов от root: root до www-data: www-data, но все равно ничего!

Что еще я могу попробовать? Там должно быть что-то! Может кто-нибудь мне помочь?

Командная строка и веб-сервер не используют один и тот же php.ini! Проверьте, какой php.ini используется в командной строке и в модуле сервера.

У меня была такая же проблема несколько недель назад. Я пытался:

  • PHP mail () работает из командной строки, но не apache
  • Функция PHP «mail ()» отправляет почту из php5 cli, но не тогда, когда скрипт запускается браузером

И еще несколько других.

У меня была запись в журнале ошибок, в которой говорилось об ошибке Segmentation fault . Через 2 дня нашел проблему. Я использовал Exim4 в моей системе debian, комбинация с apache2 дала ошибку сегментации. Я заменил Exim4 на Postfix, и он сработал!

Однако в вашем случае вы не можете запускать exec как whoami и вы должны следовать этому пути.

Поскольку функция почты в конечном итоге приходит к os, команда exec должна работать!

Вы можете отправить электронное письмо с помощью phpMailer, чтобы отправить SMTP с помощью функции mail (). Код здесь (http://phpmailer.worxware.com/) Просто идея

возможно, может использовать эту расшифровку для opencart для использования phpmailer для замены функции почты. Я не проверял это только так и думал, что это может дать кому-то некоторые идеи.

В моем случае это был php-fpm используемый в изображении докеры Magento, с которым я играл. Он поддерживает предварительную загрузку php (с конфигурацией).

После перезагрузки он взял новые настройки: как перезапустить или просто sudo killall php-fpm .