Я пытаюсь понять, почему функция электронной почты в PHP терпит неудачу при вызове через веб-браузер (например, apache), но я могу запустить тот же скрипт из командной строки, используя
php -f mailtest.php
- Как отправлять электронные письма в больших количествах с помощью PHP-скрипта и cronjobs
- Папка Sendmail не существует в каталоге xampp?
- Отправка почты с localhost с помощью PHP
- От адреса не работает для заголовков PHP-заголовков
- Исключить исключение «Swift_TransportException» с сообщением «Невозможно установить соединение с хостом smtp.gmail.com
Это один из серверов Fedora моего клиента, поэтому я не понимаю его полностью, но у меня есть root-доступ, если мне нужно что-то изменить.
от php.ini:
sendmail_path = / usr / sbin / sendmail -t -i
Не уверен, что это может иметь значение, но / usr / sbin / sendmail является символической ссылкой на / etc / alternatives / mta, которая является символической ссылкой на /usr/sbin/sendmail.sendmail. FWIW у пользователя apache есть разрешение на запуск sendmail (проверенный sendmail непосредственно из командной строки).
OS: Fedora Core 7 Linux (kernel 2.6.23.17) Apache: 2.2.8 PHP: 5.2.6
Любая помощь здесь будет принята с благодарностью!
Я нашел проблему. SELinux не позволял apache использовать sendmail. Чтобы диагностировать, я использовал
$ sestatus -b | grep sendmail httpd_can_sendmail off
Затем, чтобы исправить проблему:
$ restorecon /usr/sbin/sendmail $ setsebool -P httpd_can_sendmail 1
Подробнее об этом читайте здесь .
Это ошибка прав пользователя? Ваша учетная запись и сценарий, используемые для выполнения скриптов PHP, могут иметь разные привилегии.
Что-нибудь в apache error_log? Является ли PHP запущенным как модуль apache или двоичный код CGI?
EDIT: Хммм … ничего в журнале ошибок. Как вызывается обращение к mail(...)
? Что-нибудь интересное в почтовом журнале? Это зависит от MTA, часто / var / log / maillog
EDIT 2: safe_mode
ли safe_mode
и вы используете дополнительные_параметры mail()
?
Это мой первый ответ здесь, на StackOverflow! : о
Так что у меня была такая же проблема, как у вас, матовый! Я использую OpenSuse. Я понял, что postfix check
привела к
postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postqueue postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postdrop postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop
поэтому я выполнил следующие команды:
# my postfix user is postfix and postfix group is maildrop sudo chown 'postfix:maildrop' /usr/sbin/post{drop,queue} sudo chmod g+s /usr/sbin/post{queue,drop}
и затем я попробовал простой PHP-скрипт из своего браузера, чтобы проверить, все ли работает нормально: (если вы хотите отправить письмо abc@gmail.com)
<?php $ret = mail('abc@gmail.com', 'subject', 'message'); if ($ret === true) echo 'Success'.PHP_EOL; else echo 'Error'.PHP_EOL;
и это прекрасно! Я надеюсь, что вы устраните проблему с помощью этого метода