Linux (Fedora 20) Конфигурация msmtp отправляет из оболочки, но не из PHP / apache, я в тупике … Моя цель — просто отправить электронную почту через мой SMTP Gmail с моего веб-сервера разработки localhost, чтобы проверить вывод кода, который отправляет почту
Файл sendmail php.ini читает:
sendmail_path = / usr / bin / msmtp —debug -C / etc / msmtprc —read-получатели
в системе есть только один php.ini, используемый как для CLI, так и для веб-сервера, расположенного в /etc/php.ini
разрешения для / etc / msmtprc установлены на apache: apache 600
Следующие команды от имени root работают и создают тестовое письмо:
но apache / php выдает ошибку, когда функция php mail вызывается из следующего скрипта:
if (mail('[email protected]', 'Newest Test Email', 'Test email body'))
print "Email successfully sent";
else
print "An error occured";
Файлы журнала во время ошибки читаются следующим образом:
/ etc / msmtprc содержит:
defaults
auth on
tls on
tls_trust_file /etc/pki/tls/cert.pem
account default
host smtp.gmail.com
port 587
user [email protected]
from [email protected]
password [******]
auth on
syslog on
приветствуются любые указатели в правильном направлении … только пытаясь добиться простого пути для почтовой функции localhost php для отправки электронной почты через мой SMTP-сервер Gmail — это не конфигурация рабочего сервера, это мой локальный веб-сервер apache / php для веб-сайтов развитие
Извините за задержку с ответом. Я тоже боролся с этим вопросом сам. Проблема была в правах доступа к файлу конфигурации.
Если вы правильно помните, нас просят chmod
файл в 0600
потому что иначе это не сработает. И вы, вероятно, создали этот файл, используя другого пользователя, чем ваш веб-сервер / php.
Это означает, что ваш веб-сервер или тот, кто управляет PHP, не может прочитать этот файл, чтобы получить ваши настройки электронной почты.
Также, если вы создали свой файл конфигурации в ~/.msmtprc
это тоже не сработает. Потому что при использовании с PHP MSMTP использует только глобальный из /etc/msmtprc
Это означает, что вы должны создать свой конфиг в /etc/msmtprc
а потом chown
файл конфигурации, чтобы соответствовать пользователю вашего webs-erver / php.
Поскольку я работал на Debian и использовал NGINX, я должен был сделать этот файл доступным для www-data
с chown www-data:www-data /etc/msmtprc
На CentOS этот пользователь может быть httpd
Поэтому убедитесь, что этот пользователь правильно настроен.
После этого я смог без проблем отправлять письма по протоколу MSMTP с использованием PHP.
Я вижу, что этот вопрос задавался, оставался без ответа на ряде форумов — и даже столкнулся с моим собственным вопросом на сайте, который «очищает» содержимое от переполнения стека, — и публикую ответ на этот вопрос для тех, кто смущен этой проблемой. Хотя это не точный ответ на этот вопрос, он имеет отношение к поддержке кольца ключей gnome, добавленной в msmtp, так как он запускается без оболочки и с tls. Невозможно и не желая пытаться убедить код действовать таким образом, для которого он не был предназначен, мое решение было с некоторым сопротивлением сконфигурировать exim для smtp relay.
У меня была симиларная ошибка msmtp: /etc/msmtprc: must be owned by you
с openSuse и сменой владельца / etc / msmtprc не было возможности, так как cron и другие сервисы используют его для других целей, и это привело к другой ошибке msmtp: /etc/msmtprc: must have no more than user read/write permissions
Мое решение было:
1) от имени root создайте копию msmtprc
cp /etc/msmtprc /etc/msmtprc_apache
chown wwwrun:www /etc/msmtprc_apache
chmod 0600 /etc/msmtprc_apache
2) изменить настройки apache php.ini (поиск по sendmail_path) и принудительно настроить файл конфигурации (опция -C)
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc_apache -t"
3) закомментируйте в настройках apache php.ini
; SMTP = localhost
; smtp_port = 25
Для простого тестирования, в качестве root-пользователя для пользователя wwwrun и тестирования с помощью php
sudo -u wwwrun -s
php -r "mail('[email protected]', 'PHP test', 'Test from PHP as wwwrun user');"
У меня была проблема отправки MSMTP из оболочки, но он не работал через PHP на CentOS 7. После того, как я потратил целый день на это, я решил …
sudo -u {apacheUser} -s
which msmtp
Для меня это выводится /bin/msmtp
не user/
мусорное ведро или любые местные мусорные ведра. Как только я обновил свой sendmail_path в PHP.ini путем, используемым пользователем Apache, все работало отлично.
Окончательное решение для меня:
sendmail_path = /bin/msmtp -t -i
Также, возможно, стоит отметить, что я прокомментировал SMTP
а также smtp_port
в моем php.ini