есть форум, который отправлял почту. крутился на freebsd 6.2 перенес на новый сервер под управлением centos. отвалилась почта. диагностика с форума говорит:
Почтовая функция возвратила ошибку при попытке отправить почту.
Обнаружены следующие ошибки PHP при попытке отправить почту:
Warning: fsockopen() [function.fsockopen]: unable to connect to IPADDRESS:25 (Permission denied) in /includes/class_mail.php on line 604Warning: Unable to connect to SMTP server in /includes/class_mail.php on line 586
почтовый сервер не менялся (внешний по отношению к обоим вариантам форума
PHP Version 5.1.6 с нового сервакаSystem Linux forum 2.6.18-53.el5 #1 SMP Mon Nov 12 02:14:55 EST 2007 x86_64
Build Date Sep 20 2007 10:05:56
Configure Command './configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--with-mime-magic=/etc/httpd/conf/magic' '--without-sqlite' '--with-libxml-dir=/usr' '--with-xml' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter'
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php.ini
Scan this dir for additional .ini files /etc/php.d
additional .ini files parsed /etc/php.d/gd.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/ncurses.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_sqlite.ini
PHP API 20041225
PHP Extension 20050922
Zend Extension 220051025
Debug Build no
Thread Safety disabled
Zend Memory Manager enabled
IPv6 Support enabled
Registered PHP Streams php, file, http, ftp, compress.bzip2, compress.zlib, https, ftps
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
Registered Stream Filters string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, convert.iconv.*, bzip2.*, zlib.*
На данном хостинге нельзя скриптами отправлять почту на внешние смтп-сервера прямым подключением на 25 порт.Это сделано для ограничения возможностей по рассылке спама скриптами. Так бывает.
>
>На данном хостинге нельзя скриптами отправлять почту на внешние смтп-сервера прямым подключением
>на 25 порт.Это сделано для ограничения возможностей по рассылке спама скриптами.
>Так бывает.нет, все открыто, да и как они собираются анализировать телнетом/smtp ли я отправляю или через скрипт?
>>
>>На данном хостинге нельзя скриптами отправлять почту на внешние смтп-сервера прямым подключением
>>на 25 порт.Это сделано для ограничения возможностей по рассылке спама скриптами.
>>Так бывает.
>
>нет, все открыто, да и как они собираются анализировать телнетом/smtp ли я
>отправляю или через скрипт?Я не столь уверен в том, что все открыто, как Вы.
А анализировать ничего не надо. Надо просто закрыть исходящие на 25 порт от пользователя апач.
>Я не столь уверен в том, что все открыто, как Вы.
>А анализировать ничего не надо. Надо просто закрыть исходящие на 25 порт
>от пользователя апач.вы наверное не поняли, я являюсь администратором этого же сервера, и сброс правил фаирвола ничего не дает. если же предположить, что на аплинке сидят и анализируют трафик по содержимому, то сильно сомневаюсь. да и на локальный smtp ничего не отправляется, если указать в настройках юзать php mail(), то все ок. через него почта сыпился на localhost, однако настраивать локально почтовку как-то не хочется, когда есть уже одна работающая...
Более того, указывая в качестве smtp сервера localhost - получаем ту же самую ошибку. что-то я видимо в php недокрутил :(
>Более того, указывая в качестве smtp сервера localhost - получаем ту же
>самую ошибку. что-то я видимо в php недокрутил :(А указывая например 80 порт - все нормально, пытаемся установить соединение куда угодно....
>>Более того, указывая в качестве smtp сервера localhost - получаем ту же
>>самую ошибку. что-то я видимо в php недокрутил :(
>
>А указывая например 80 порт - все нормально, пытаемся установить соединение куда
>угодно....Возможно SMTP-сервер не слушает порт на 127.0.0.1:25, с слушает только внешний интерфейс.
Попробуй посмотреть
netstat -l -n -p
А еще мне кажется странным сообщение об ошибке. Было бы интересно посмотреть на /includes/class_mail.php on line 604 и увидеть с каким параметрами там вызывается функция fsockopen ?
>[оверквотинг удален]
>
>Возможно SMTP-сервер не слушает порт на 127.0.0.1:25, с слушает только внешний интерфейс.
>
>Попробуй посмотреть
>netstat -l -n -p
>
>
>А еще мне кажется странным сообщение об ошибке. Было бы интересно посмотреть
>на /includes/class_mail.php on line 604 и увидеть с каким параметрами там
>вызывается функция fsockopen ?слушает, слушает...
в 604 строке $this->smtpSocket = fsockopen($this->smtpHost, $this->smtpPort, $errno, $errstr, 30);более того такой вот простейший тест
<?php
$fp = fsockopen("IPADDRESS", 25, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
тоже не проходит. указываем к примеру там 80 порт или 53 проходит. а 25, 1153 да и вообще какие-нибудь левые - фиг. в том числе и на локал хост.
вылечилось следующим:
setsebool -P httpd_can_network_connect 1