Есть тестовая страничка:
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');
ini_set('display_startup_errors', 'On');
if (mail("user@ukr.net", "1234test1234", "12qwerty34"))
{
echo "Почта работает.";
}
else
{
echo "Почта не работает.";
}
echo phpinfo();
?>
Открываю её и письмо не отправляется.
Установлен apache2 и к немо следующие пакеты php:
apt-get -y install php7.0
apt-get -y install php7.0-common
apt-get -y install php7.0-curl
apt-get -y install php7.0-mysql
apt-get -y install php7.0-cli
apt-get -y install libapache2-mod-php7.0
apt-get -y install php7.0-gd
После установки этих пакетов была выполнена команда a2enmod php7 и потом запущен апач.
uname -a
Linux ukemp.ukrkran.local 4.4.0-96-generic #119-Ubuntu SMP Tue Sep 12 14:58:51 UTC 2017 i686 i686 i686 GNU/Linux
apache2 -version
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2017-09-18T15:09:02
php --version
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
ldd /usr/lib/apache2/modules/libphp7.0.so
linux-gate.so.1 => (0xb7745000)
libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xb733d000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7322000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb72ad000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7258000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7253000)
libxml2.so.2 => /usr/lib/i386-linux-gnu/libxml2.so.2 (0xb7072000)
libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0xb7008000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0xb6e1b000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6c65000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6c48000)
/lib/ld-linux.so.2 (0xb7746000)
libicuuc.so.55 => /usr/lib/i386-linux-gnu/libicuuc.so.55 (0xb6ab2000)
liblzma.so.5 => /lib/i386-linux-gnu/liblzma.so.5 (0xb6a8c000)
libicudata.so.55 => /usr/lib/i386-linux-gnu/libicudata.so.55 (0xb51d3000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb505c000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb503f000)
В качестве мта использую ssmtp
Вот часть конфига apache1.conf относящегося к открываемому сайту с которого должно отправляться письмо:
<VirtualHost 192.168.5.254:80>
DocumentRoot /data/web/apache/www/sait2.ru
ServerName sait2.ru
ServerAlias www.sait2.ru
<Directory /data/web/apache/www/sait2.ru>
Options Includes
AllowOverride all
</Directory>
ErrorLog /var/log/apache2/sait2.ru/error.log
CustomLog /var/log/apache2/sait2.ru/access.log combined
</VirtualHost>
Вот содержимое файлов
/etc/apache2/mods-available/php7.0.conf
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#.
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
/etc/apache2/mods-available/php7.0.load
# Conflicts: php5
LoadModule php7_module /usr/lib/apache2/modules/libphp7.0.so
Они стандартные.
Вот некоторое содержимое файлов:
/etc/php/7.0/apache2/php.ini /etc/php/7.0/cgi/php.ini /etc/php/7.0/cli/php.ini /etc/php/7.0/fpm/php.ini
display_errors = On
display_startup_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
SMTP = localhost
smtp_port = 465
sendmail_path = /usr/sbin/ssmtp -t
mail.add_x_header = On
mail.log = /var/log/php/php_mail.log
date.timezone = Europe/Kiev
ssmtp настроен правильно и из командной строки письмо прекрасно отправляется, мало того если в консоли выполнить команду:
php /data/web/apache/www/sait2.ru/index.php
то письмо то же прекрасно отправляется!
В этот файл я в последствии включил phpinfo()
и сравнил вывод информации в браузере и в консоли, они отличались только тем, что когда страницу открываю в браузере используется конфиг /etc/php/7.0/apache2/php.ini, а когда использую выше приведённую команду, то конфиг /etc/php/7.0/cli/php.ini
Я сравнил эти файлы и они оказали различны, вот различия:
diff /root/php/php.ini /etc/php/7.0/cli/php.ini
299c299
< disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
---
> disable_functions =
359c359
< expose_php = Off
---
> expose_php = On
389c389
< memory_limit = 128M
---
> memory_limit = -1
462c462
< display_errors = Off
---
> display_errors = On
473c473
< display_startup_errors = Off
---
> display_startup_errors = On
484d483
<
Я взял и скопировал файл /etc/php/7.0/cli/php.ini в папки /etc/php/7.0/apache2/ /etc/php/7.0/cgi/ /etc/php/7.0/fpm/ Поэтому в этих папках фалы php.ini стали одинаковы, перезапустил апач, открыл страницу но письмо не отправилось, причём при удачной отправке письма по команде php /data/web/apache/www/sait2.ru/index.php и при открытии страницы в логах /var/log/php/php_mail.log одна и та же запись:
[11-Oct-2017 12:05:07 Europe/Kiev] mail() on [/data/web/apache/www/sait2.ru/index.php:5]: To: user@ukr.net -- Headers:.
Файл /var/log/php/php_errors.log пустой
Я подумал что проблема в модуле для апача /usr/lib/apache2/modules/libphp7.0.so
У меня для другой системы был ранее собран из исходников модуль для апача пятой версии, по размерам он был в 6 раз больше чем этот. Этот модуль точно работает, так как на другой системе письмо прекрасно отправляется. Я взял его (к нему не хватало нескольких библиотек, я их просто скопировал после чего выполнил команду ldconfig), проверил библиотеки были все. Запустил апач, он запустился нормально. Открываю сайт, но письмо не отправляется. В браузер никаких ошибок не пишет, хотя как видно я вывод включал. Просто срабатывает if и пишет, что почта не работает и письмо действительно не отправляется. Получается, что дело не в этом модуле, тогда не понятно где, конфиги одинаковы для апача и клиента, ошибок не пишет. Может кто подскажет как подробное логирование включить.
В логаг апача вот что:
Запуск апача: /usr/sbin/apache2 -k start
ps axu | grep apache
root 6266 0.7 1.3 136500 28196 ? Ss 12:37 0:00 /usr/sbin/apache2 -k start
apache 6267 0.0 0.3 136524 7984 ? S 12:37 0:00 /usr/sbin/apache2 -k start
apache 6268 0.0 0.3 136524 7984 ? S 12:37 0:00 /usr/sbin/apache2 -k start
apache 6269 0.0 0.3 136524 7984 ? S 12:37 0:00 /usr/sbin/apache2 -k start
apache 6270 0.0 0.3 136524 7984 ? S 12:37 0:00 /usr/sbin/apache2 -k start
apache 6271 0.0 0.3 136524 7984 ? S 12:37 0:00 /usr/sbin/apache2 -k start
root 6273 0.0 0.0 5100 900 pts/0 S+ 12:38 0:00 grep apache
/var/log/apache2/access.log пустой
в /var/log/apache2/error.log вот что:
[Wed Oct 11 12:37:58.188215 2017] [mpm_prefork:notice] [pid 6266] AH00163: Apache/2.4.18 (Ubuntu) PHP/7.0.22-0ubuntu0.16.04.1 configured -- resuming normal operations
[Wed Oct 11 12:37:58.188374 2017] [core:notice] [pid 6266] AH00094: Command line: '/usr/sbin/apache2'
открываю сайт, пробую двумя браузерами, очень старой оперой и свежим firefox-сом
/var/log/apache2/sait2.ru/error.log пустой
в /var/log/apache2/sait2.ru/access.log вот что:
192.168.5.226 - - [11/Oct/2017:12:40:39 +0300] "GET / HTTP/1.1" 200 90683 "-" "Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.15"
192.168.5.226 - - [11/Oct/2017:12:42:36 +0300] "GET / HTTP/1.1" 200 90646 "-" "Mozilla/5.0 (X11; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0"
В чём причина не работы функции mail и как включить очень подробное логирование так и не знаю.
За помощь заранее благодарен!