Моя проблема в том, что скрипт 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, и все будет работать