Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

> Внимание!

Прочитайте перед тем, как задать вопрос:

при создании темы в этом разделе предполагается, что вы обладете базовыми знаниями о работе GNU/linux
и имеете представление об использовании средств настройки, предоставленных вашим дистрибутивом,
а также понимаете назначение и основные принципы работы используемых вами сервисов.

при создании темы с описанием проблемы
- полностью описывайте проблему
- описывайте свои действия, предпринятые для решения проблемы
- приводите свои конфиги, логи или сообщения об ошибках
- указывайте, пожалуйста, свой дистрибутив

если вы не уверены в своих знаниях - добро пожаловать в "Администрирование для начинающих".

 
Reply to this topic Start new topic
> с сайта не могу отправить письмо mail - php
v4567
bookmark
gyfbbdvkffmrljmmmwd
Oct 11 2017, в 12:45
Сообщение #1


Интересующийся новичок
Иконка группы

Сообщений: 95

Вставить имя   :   Цитата

Группа: Участники

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

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


Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Oct 11 2017, в 13:43
Сообщение #2


grammatikführer
Иконка группы

Сообщений: 12802

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Попробуйте для начала отправить письмо локальному пользователю.
Ну и почитайте комментарии к https://secure.php.net/manual/en/function.mail.php


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
v4567
bookmark
gyfbbdvkffmrljmmmwd
Oct 11 2017, в 14:42
Сообщение #3


Интересующийся новичок
Иконка группы

Сообщений: 95

Вставить имя   :   Цитата

Группа: Участники

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

Вот так:

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

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

Не работает если я открываю этот файл в браузере как страницу.
Получается что дело в модуле: /usr/lib/apache2/modules/libphp7.0.so
но я брал работающий (правда пятой версии) /usr/lib/apache2/modules/libphp5.so подкидывал библиотеки и то же письмо не отправлялось.
Для локального пользователя в ssmtp какой парольписать? Пользователя я так понимаю надо взять user@localhost?
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Oct 11 2017, в 14:47
Сообщение #4


grammatikführer
Иконка группы

Сообщений: 12802

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Цитата(v4567 @ 11th October 2017 - в 14:42) *
Почитал по ссылке

До этого места дочитали?
Цитата
Send mail with minimal requirements from email services.
Код
<?php
    $encoding = "utf-8";

    // Preferences for Subject field
    $subject_preferences = array(
        "input-charset" => $encoding,
        "output-charset" => $encoding,
        "line-length" => 76,
        "line-break-chars" => "\r\n"
    );

    // Mail header
    $header = "Content-type: text/html; charset=".$encoding." \r\n";
    $header .= "From: ".$from_name." <".$from_mail."> \r\n";
    $header .= "MIME-Version: 1.0 \r\n";
    $header .= "Content-Transfer-Encoding: 8bit \r\n";
    $header .= "Date: ".date("r (T)")." \r\n";
    $header .= iconv_mime_encode("Subject", $mail_subject, $subject_preferences);

    // Send mail
    mail($mail_to, $mail_subject, $mail_message, $header);
?>

А до этого?
Цитата
Often it's helpful to find the exact error message that is triggered by the mail() function. While the function doesn't provide an error directly, you can use error_get_last() when mail() returns false.
Код
<?php
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
    $errorMessage = error_get_last()['message'];
}
?>


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19th October 2017 - в 04:59




Rating@Mail.ru