2014-09-17 1 views
1

linux (fedora 20) msmtp конфигурация отправляет из оболочки, но не с PHP/apache, я в тупик ... моя цель - просто отправить электронную почту через мой gmail smtp от моего веб-сервера разработки локальный, чтобы проверить вывод кода, который отправляет почтуКонфигурация linux msmtp отправляет из оболочки, но не получается из PHP/apache

php.ini файл Sendmail читает: sendmail_path =/USR/BIN/msmtp --debug -C/и т.д./msmtprc --read-получателей

В системе используется только один php.ini, используемый как для CLI, так и для web-сервера, расположенного по адресу /etc/php.ini

Права доступа o п/и т.д./msmtprc установлены на апаш: апаш 600

следующих команд, как корневая работу и производить тестовое сообщение:

  • PHP -r «почта ('[email protected] '' Новым Test Email ',' Test email body '); "
  • runuser -l apache -c '/ usr/bin/msmtp --debug -C/etc/msmtprc --read-recipients < /var/www/html/test.mail' (test.mail включает в себя и из линии)

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

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

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

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

/и т.д./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 mail для отправки электронной почты через мой gmail smtp-сервер - это не конфигурация производственного сервера, это мой локальный веб-сервер apache/php для веб-разработки

ответ

0

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

2

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

Если вы правильно помните нас, вас попросят chmod файл 0600, потому что он не будет работать иначе. И вы, вероятно, создали этот файл с использованием другого пользователя, кроме вашего веб-сервера/php.

Это означает, что ваш веб-сервер или контролирующий PHP не могут прочитать этот файл, чтобы получить ваши настройки электронной почты.

Также, если вы создали свой файл конфигурации под ~/.msmtprc, который также не будет работать. Поскольку при использовании PHP, MSMTP только использует глобальный один из /etc/msmtprc

Это означает, что вы должны создать свой конфиг в /etc/msmtprc, а затем chown файл конфигурации, чтобы соответствовать пользователю вашей холсты-ERVER/PHP.

Так как я был на Debian, и я использовал NGINX я должен был сделать этот файл доступным для www-data с chown www-data:www-data /etc/msmtprc На CentOS, что пользователь может быть httpd Поэтому убедитесь, что у вас есть, что пользователь установлен правильно.

После этого я смог без проблем отправлять почту с помощью MSMTP с помощью PHP.

+0

Просто к сведению: Я использую msmtp (из EPEL depo) на CentOS 6, и я смог использовать ''/etc/msmtprc'' с chmod, установленным в '' 0644'', и chown, установленный в '' root: root'', не проблема. Я не знаю, откуда взялось требование установить chmod на '' 0600'' и chown для пользователя, который будет использовать msmtp, но это не требуется. – ub3rst4r

+0

пользователь, который запускает php-процесс и запускает msmtp, должен, по крайней мере, читать файл * msmtprc *, также вы не должны использовать '/ etc/msmtprc', просто используйте' -C', чтобы указать путь, просто убедитесь, что один и тот же пользователь выше может пройти через родительские каталоги. – Alex

0

Я имел symilar ошибку msmtp: /etc/msmtprc: must be owned by you с OpenSUSE и изменение владельца/и т.д./msmtprc не вариант, так как хрон и другие услуги, использовать его для других целей, и это привело к другим ошибки msmtp: /etc/msmtprc: must have no more than user read/write permissions

Мое решение было :

1) как корень создать копию msmtprc

cp /etc/msmtprc /etc/msmtprc_apache 
chown wwwrun:www /etc/msmtprc_apache 
chmod 0600 /etc/msmtprc_apache 

2) изменить Апач настройки php.ini (поиск sendmail_path) и заставить конфигурационный файл (опция -c)

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc_apache -t" 

3) комментарий в апача php.ini настройки

; SMTP = localhost 
; smtp_port = 25 

Для простого тестирования, в качестве корневого коммутатора для wwwrun пользователя и тест с PHP

sudo -u wwwrun -s 
php -r "mail('[email protected]', 'PHP test', 'Test from PHP as wwwrun user');" 
+0

Документация msmtp на самом деле не говорит вам, но вызов -C - это то, что вызывает проверку прав собственности, а не тот факт, что это файл/etc/msmtprc (системный файл по умолчанию. Если вы полностью опустите часть -C/etc/msmtprc, она по умолчанию будет/etc/msmtprc и пропустит проверку прав собственности. – Fuzzy76

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

Смежные вопросы