Назад | Перейти на главную страницу

Функция PHP mail () работает из командной строки, но не работает с apache

Моя проблема в том, что скрипт php, который должен отправлять почту, не отправляет его, если я запускаю его в браузере, но работает в cli. Это не помогает Функция PHP mail () работает в CLI, но не в Apache

В обоих /etc/php/7.0/fpm и /etc/php/7.0/cli одинаковых настройках почты:

SMTP = localhost
smtp_port = 25 
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"
mail.add_x_header = On
mail.log = /var/log/maillog

Если я ввожу терминал

php -r mail("my_mail@gmail.com", "Test", "test");

он работает, также он работает, если я печатаю

sudo -u www-data php -r mail("my_mail@gmail.com", "Test", "test");

Однако, если я попытаюсь отправить почту из интерактивного режима php php -a а затем просто введите там mail("my_mail@gmail.com", "Test", "test"); я получил /etc/msmtprc permission denied. Я пытался chmod 666 /etc/msmtprc (тем не мение ls -al показывает -rw------- 1 www-data www-data 267 Apr 4 11:10 /etc/msmtprc, поэтому я думаю, что нет необходимости разрешать доступ) Я получаю ошибку, например msmtp: /etc/msmtprc: contains secrets and therefore must be owned by you файл msmtprc изменен таким образом chmod 600 msmtprc, согласно многим учебникам.

Как-то я понял, что не так, просто пытаясь разные конфигурации, поэтому пишу ответ на свой вопрос :)

в php7 есть папки, доступные для apache2, fpm, cli и mods, в /etc/php/7.0/ В некоторых руководствах / вопросах говорится, что для работы msmtp вам нужно отредактировать php.ini в папке fpm и cli. Это не совсем так. Чтобы apache2 работал с msmtp, чтобы вы могли использовать функцию mail () для отправки писем в сценариях php, вам необходимо настроить php.ini в /etc/php/7.0/apache2. Конфигурация почты всех трех файлов php.ini должна быть одинаковой, т.е.

SMTP = localhost
smtp_port = 25 
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"
mail.add_x_header = On
mail.log = /var/log/maillog

Обратите внимание, что опция -C показывает путь к вашему файлу msmtprc, который должен быть таким же, как здесь. Также обратите внимание, что, поскольку вы установили и настроили msmtp, поэтому вы можете отправлять письма из командной строки (не используя php), вам НЕ нужно устанавливать sendmail на свой сервер. Просто настройте файлы php.ini, и все будет работать