LINUX.ORG.RU
ФорумAdmin

с сайта не могу отправить письмо mail - php

 ,


0

3

Есть тестовая страничка:

<?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 и как включить очень подробное логирование так и не знаю.

За помощь заранее благодарен!

★★

mail(«user@ukr.net», «1234test1234», «12qwerty34»)

просто безотносительно к вопросу, почитай про envelope from. страна непуганных веб-кодеров... Даже если отправишь, то не факт, что что дойдёт.

AS ★★★★★ ()
Ответ на: комментарий от AS

Вроде всё правильно. Пробовал заменить двойные кавычки на одинарные, не помогло.

Вот так:

php /data/web/apache/www/sait2.ru/index.php

всё работает, письмо отправляется и я его получаю.

Не работает если я открываю этот файл в браузере как страницу. Получается что дело в модуле: /usr/lib/apache2/modules/libphp7.0.so но я брал работающий (правда пятой версии) /usr/lib/apache2/modules/libphp5.so подкидывал библиотеки и то же письмо не отправлялось.

v4567 ★★ ()

Я взял и скопировал файл /etc/php/7.0/cli/php.ini в папки /etc/php/7.0/apache2/ /etc/php/7.0/cgi/ /etc/php/7.0/fpm/ Поэтому в этих папках фалы php.ini стали одинаковы

А они точно должны быть одинаковы ? Может быть стоило только нужное поправить в... Кстати, а что-то изменилось ? Почему не apache2-mod_php/php.ini ?

Что касается mail(), то я не про это, а про автоматом формирующийся при таком вызове envelope from, который может получиться кривым, что может быть критично при проверке спамоловками.

AS ★★★★★ ()
Ответ на: комментарий от AS

А они точно должны быть одинаковы ? Может быть стоило только нужное поправить в... Кстати, а что-то изменилось ? Почему не apache2-mod_php/php.ini ?

Я и копировал и менял только нужно, всё равно не работает.

Что касается mail(), то я не про это, а про автоматом формирующийся при таком вызове envelope from, который может получиться кривым, что может быть критично при проверке спамоловками.

соединения даже нет, я tcpdump-пом становлюсь нет ни одного пакета, а вот так:

php /data/web/apache/www/sait2.ru/index.php

не работает когда я пытаюсь этот файл открыть как страницу в браузере.

Проверял уже на другом сервере с php5, то же не работает.

v4567 ★★ ()
Ответ на: комментарий от v4567

соединения даже нет, я tcpdump-пом становлюсь

функция mail() tcp не использует, она использует вызов того, что написано в соответствующей переменной в ini. То есть, напрямую бинарник и пайп.

AS ★★★★★ ()
Ответ на: комментарий от AS

функция mail() tcp не использует, она использует вызов того, что написано в соответствующей переменной в ini. То есть, напрямую бинарник и пайп.

ну да дальше работает ssmtp

Получается когда в браузере открываю этот файлик, то дело до ssmtp не доходит, так как в tcpdump тишина.

v4567 ★★ ()
Ответ на: комментарий от v4567

в php.ini

что вот тут должно стоять:

SMTP = localhost

может не localhost?

в конфиге интерпретатора php то же стоит localhost и всё работает.

v4567 ★★ ()
16 сентября 2018 г.
Ответ на: комментарий от v4567

Изменяем файл /etc/ssmtp/revaliases.

root:YOUR_EMAIL@ukr.net:smtp.ukr.net:465 apache:YOUR_EMAIL@ukr.net:smtp.ukr.net:465 www-data:YOUR_EMAIL@ukr.net:smtp.ukr.net:465

при запросах от браузера на сервере ответ формируется от apache или www-data

anonymous ()

Изменяем файл /etc/ssmtp/revaliases.

root:YOUR_EMAIL@ukr.net:smtp.ukr.net:465

apache:YOUR_EMAIL@ukr.net:smtp.ukr.net:465

www-data:YOUR_EMAIL@ukr.net:smtp.ukr.net:465

при запросах от браузера на сервере ответ формируется от apache или www-data

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.