Конфигурация 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 ('emily@emilytench.net ',' Newest Test Email ',' Test email body ');"
- runuser -l apache -c '/ usr / bin / msmtp --debug -C / etc / msmtprc --read-получателей
но apache / php выдает ошибку, когда вызывается функция php mail из следующего скрипта:
if (mail('emily@emilytench.net', '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 emily@emilytench.net
from emily@emilytench.net
password [******]
auth on
syslog on
приветствуются любые указатели в правильном направлении... только пытаясь достичь простого пути для почтовой функции localhost php для отправки электронной почты через мой SMTP-сервер Gmail - это не конфигурация рабочего сервера, это мой локальный веб-сервер apache / php для веб-сайтов развитие
4 ответа
Извините за задержку с ответом. Я тоже боролся с этим вопросом сам. Проблема заключалась в правах доступа к файлу конфигурации.
Если вы правильно помните, нас просят 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.
У меня была проблема отправки 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
У меня была симиларная ошибка 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('test@test.com', 'PHP test', 'Test from PHP as wwwrun user');"
Я не мог изменить владельца файла из-за того, что mstmprc монтировался из секрета kubernetes. Замена пароля на passwordeval сделала свое дело.
passwordeval "echo the-password"
Очевидно, что это не самый безопасный способ, поэтому в идеале echo следует заменить инструментом шифрования.
ИСПРАВЛЕНО - msmtp: невозможно войти в /var/log/msmtp: невозможно открыть: отказано в разрешении
Это для следующего человека, который столкнется с этой проблемой.
Файл конфигурации системы для msmtp -rw-rw-rw- 1 root root 266 июн 3 06:07 /etc/msmtprc
# mimecast
account mimecast
host smtp.mail.com
port 587
protocol smtp
from admin@company.com
auth on
user authuser@company.com
password mypassword
tls on
tls_certcheck off
logfile ~/.msmtp.log
syslog off
account default : mimecast
.#mimecast is just a section header and can be deleted
account mimecast - is a title if multiple send accounts are available or needed
account default : mimecast - is saying this is the default account used
При необходимости файл конфигурации для каждого пользователя может быть таким же, как системный файл с другим идентификатором пользователя, паролем и полями from. Обратите внимание "." перед.msmtprc
-rw ------- 1 ubuntu ubuntu 267 3 июня 05:50 .msmtprc
Файл журнала создается для каждого пользователя в их домашнем каталоге с правильными разрешениями - с разрешениями не нужно связываться.
-rw-r -r-- 1 root msmtp 344 3 июня, 06:09 .msmtp.log
Чтобы отправить электронное письмо из командной строки
echo -e "Subject: MySubject\r\n\r\nThis is mybody" |msmtp recipient@company.com
use the -C configfilename to specify alternate local config files
use the -a account mimecast to switch between accounts to send from within the config file ( did not try this option )
или используйте
msmtp recipient@company.com
Subject: This is my subjectline
Blank line ( press enter )
Here is the body of the email
CTRL-D ( to send )
или используйте эту опцию для отправки почты из командной строки
msmtp recipient@company.com < filename
где имя файла содержит
To: recipient@company.com
From: sender@company.com
Subject: Here is the Subject
body body body .....
Я вижу, что этот вопрос задавался, оставался без ответа на ряде форумов - и даже столкнулся с моим собственным вопросом на сайте, который "очищает" содержимое от переполнения стека, - и публикую ответ на этот вопрос для тех, кто смущен этой проблемой. Хотя это не точный ответ на этот вопрос, он имеет отношение к поддержке кольца ключей gnome, добавленной в msmtp, так как он запускается без оболочки и с tls. Невозможно и не желая пытаться убедить код действовать таким образом, для которого он не был разработан, мое решение было с некоторым сопротивлением сконфигурировать exim для smtp relay.