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

Моя проблема в том, что php-скрипт, который должен отправлять почту, не отправляет его, если я запускаю его в браузере, а работает в cli. Это не помогает функции mail () PHP, работающей в 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 chmodded таким образом chmod 600 msmtprcСогласно многим учебникам.

1 ответ

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

в 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. Конфигурация почты всех 3 файлов 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 и все будет работать

Другие вопросы по тегам