Win2003 Server + IIS + PHP - mail() не работает

anpal

Guest
Win2003 Server + IIS + PHP - mail() не работает

Привет всем!

Ситуация такая:
Есть Windows 2003 Server + IIS6 + PHP4.
Теперь пробуем послать почту функцией mail().
Получаем следующее сообщение:
Warning: mail(): Failed to connect to mailserver
at "localhost" port 25, verify your "SMTP" and "smtp_port"
setting in php.ini or use ini_set() in
c:\inetpub\wwwroot\testmail.php on line ...
SMTP-server на этой машине стоит ровно на 25-м порту:)
Дальше - меняем в php.ini или при помощи ini_set(),
как рекомендуется, SMTP и smtp_port на адрес релея провайдера,
получаем то же сообщение, только вместо localhost-a - smtp.provider.net.

SMTP и локальный и провайдера проверял лично с этого же сервака - все работает как надо.
Почта уходит (и Outlook-ом и через telnet).

Дальше, мои действия - я подключил модуль php_sockets и пишу следующий скрипт:
PHP:
$s = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(socket_connect($s,"localhost",25))
{
	socket_close($s);
	echo("socket ok");
}else{
	echo("socket failed");
}
Этот код, как не странно работает нормально - открывает 25 порт, и выдает "socket ok".
А mail() все равно не работает...

Вот такая петрушка...
Что это может быть, народ, помогите, уже целый день угробил...

Может это с виндой связано, или как-то php криво встал или что? Хотя в остальном, вроде все работает...

Спасибо заранее...
 

anpal

Guest
1. Файервол выключен
2. Как бы работал скрипт, который я привел выше, если бы был включен файервол - никто бы мне не разрешил открыть порт?
 

DiMA

php.spb.ru
Команда форума
Файрвол не запрещает открывать порты. Скрипт можно было запустить из консоли.
 

anpal

Guest
Ну я то знаю, что я скрипт запускаю не из консоли, а из web-browser-а...
Как это файервол не запрещает? А чем же он тогда занимается?
Ничего нестандарного не стоит - где искать файервол (кроме Routing and Remote Access) :)
 

slach

Новичок
если telnet localhost 25
прокатывает нормально

и у тебя XP SP2
тогда все таки имеет смысл шукать именно файрвол
 

anpal

Guest
telnet localhost 25 работает нормально...

у меня Windows 2003 Server
файервола, вроде нет, но щас буду искать...
 

slach

Новичок
в 2003 как раз файрвол
на уровне аппликаций

что говорит fsockopen на localhost и 25й порт ??
какие настройки специфические могут быть у встроенного SMTP ?
 

anpal

Guest
SMTP - обычный от IIS6 (Virtual SMTP server), специфических настроек - никаких, даже пробовал ставить его open-relay-ем (т.е. чтобы принимал любую почту от всех)...

fsockopen - не пробовал, но пробовал socket_connect($s,"localhost",25) - все нормально...

Насколько я могу видеть, то firewall (ICF) не включен для локальной сети, хотя как его проверить для интерфейса 127.0.0.1?
 

slach

Новичок
Дальше - меняем в php.ini или при помощи ini_set(),
как рекомендуется, SMTP и smtp_port
мда
при помощи php_ini ты меняешь только RUNTIME конфигурацию
php.ini не изменяется ни на байт

где у тебя лежит php.ini ?
должен лежать
в c:\WINDOWS

там должно быть
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
sendmail_from = поставь_твое_мыло

проверяй
 

anpal

Guest
slach
мда
при помощи php_ini ты меняешь только RUNTIME конфигурацию
php.ini не изменяется ни на байт
ну ребята, я ж не полный ламозоид (все-таки лет 10 программинга за плечами)... :)
я все прекрасно понимаю, точно так же, как и то, что если при помощи ini_set() изменить переменные, то в контексте текущего скрипта они точно будут такими как я их назначил.
Выражаясь другими словами, после вызова init_set() в текущем скрипте уже "по барабану" как переменные определены в php.ini... :)
 

slach

Новичок
ок.
идем на http://www.sysinternals.com/ntw2k/source/tcpview.shtml
качаем TCPView
и отчаянно мониторим на какие порты пытается открыть соединения php5

еще phpinfo() внимательно глядим
там тоже SMTP настройки было бы не плохо поглядеть

вообще странно
SMTP "localhost" PHP_INI_ALL
smtp_port "25" PHP_INI_ALL Available since PHP 4.3.0.

обе через ini_set должны работать

а ты пробовал чего нибудь через fsockopen отправить то ??
ну там fputs($socket,'HELO test');
и т.д. ??
 

anpal

Guest
slach
идем на http://www.sysinternals.com/ntw2k/source/tcpview.shtml
качаем TCPView
сори, этим я пожалуй завтра займусь...:)

а ты пробовал чего нибудь через fsockopen отправить то ??
ну там fputs($socket,'HELO test');
а вот этот пробовал...

написал такое:

$s = fsockopen("localhost",25);
if($s)
{
fputs($s,"helo localhost\r\n");
fputs($s,"mail from: [email protected]\r\n");
fputs($s,"rcpt to: my_email_address\r\n");
fputs($s,"data\r\n");
fputs($s,"subject: helo, test...\r\n");
fputs($s,"\r\n");
fputs($s,"we are the champions, my friend...\r\n");
fputs($s,"\r\n");
fputs($s,".\r\n");
fputs($s,"quit\r\n");
fclose($s);
}

и получил письмо на my_email_address, чего и следовало ожидать...
а вот с mail() все равно не получается... :(
 

slach

Новичок
если fsockopen НОРМАЛЬНО прокатывает

тогда смотри php.ini и _не_парь_нам_тут_мозги_больше_


1) либо у тебя пытается вызваться sendmail.exe и т.п.
потому что раскоментирована настройка какая нибудь
2) либо у тебя стоят специфические настройки SMTP ;)
3) поссмотри со стороны SMTP сервера какой нибудь мониторинг открой, по евентам или логам, не знаю что там в IIS6 на эту тему

возможно отсылается чтото неверное в заголовках

4) попробуй другой SMTP сервер наконец, eServ например
 

DiMA

php.spb.ru
Команда форума
http://www.sysinternals.com/ntw2k/source/tcpview.shtml
без скаченного Sysinternals Adminstrators Pak (70мб) + крек будет обрезанным и не нужным ни для чего. Хотя этот pak рекомендую поискать и скачать. Там есть классная утилита - сделать boot CD с утилитами для восстановления винды: смены паролей, доступ к файлам и т.д.

А вместо tcpview есть окно мониторинга в файрволе Outpost :)
 

slach

Новичок
DiMa у него нет файрвола

ему tcpview ВПОЛНЕ ПРИЛИЧНАЯ утилита
показывает все что надо

еще можно поставить какой нибудь TCP Reverse Engineer и заставить его случать loopback

сисадминпак 70 метров ??? он вообще зачем ?

а проблема судя по всему элементарная какая нибудь =) от очень умной головы такое случается когда где нибудь забыл галку поставить но упорно считаешь что галка у тебя стоит
 
Сверху