Конфигурация linux msmtp отправляет из оболочки, но не из PHP / apache

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 работают и создают тестовое письмо:

  • php -r «mail (’[email protected] ‘,’ Newest Test Email ‘,’ Test email body ‘);»
  • runuser -l apache -c ‘/ usr / bin / msmtp —debug -C / etc / msmtprc —read-получатели < /var/www/html/test.mail ‘(test.mail включает в себя и из строк)

но apache / php выдает ошибку, когда функция php mail вызывается из следующего скрипта:

if (mail('[email protected]', 'Newest Test Email', 'Test email body'))
print "Email successfully sent";
else
print "An error occured";

Файлы журнала во время ошибки читаются следующим образом:

  • / var / log / httpd / error_log:
    msmtp: невозможно подключиться к smtp.gmail.com, порт 587: в доступе отказано
    msmtp: не удалось отправить почту (учетная запись по умолчанию из / etc / msmtprc)

/ 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 для веб-сайтов развитие

1

Решение

Извините за задержку с ответом. Я тоже боролся с этим вопросом сам. Проблема была в правах доступа к файлу конфигурации.

Если вы правильно помните, нас просят 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.

2

Другие решения

Я вижу, что этот вопрос задавался, оставался без ответа на ряде форумов — и даже столкнулся с моим собственным вопросом на сайте, который «очищает» содержимое от переполнения стека, — и публикую ответ на этот вопрос для тех, кто смущен этой проблемой. Хотя это не точный ответ на этот вопрос, он имеет отношение к поддержке кольца ключей gnome, добавленной в msmtp, так как он запускается без оболочки и с tls. Невозможно и не желая пытаться убедить код действовать таким образом, для которого он не был предназначен, мое решение было с некоторым сопротивлением сконфигурировать exim для smtp relay.

0

У меня была симиларная ошибка 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');"
0

У меня была проблема отправки 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

0
По вопросам рекламы [email protected]