Конфигурация 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} -swhich 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.

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