PDA

Просмотр полной версии : Мыло через socket в PHP


errou
28.01.2006, 22:16
Народ, помогите, пожалуйста!
Решил написать простецкий скрипт отправки почты. Проверил nslookup-ом сервера обмена почтой на Mail.ru.

код PHP

<?php
$host="mxs.mail.ru";
$port="25";
$from="errou@mail.ru";
$to="errou@mail.ru";
$text="test";

$f=fsockopen($host,$port);
fputs($f, "HELO {$_SERVER['SERVER_NAME']}\r\n");
fputs($f,"MAIL FROM: <$from>");
print(fgets($f));
print(fgets($f));
fputs($f,"RCPT TO: <$to>");
fputs($f,"DATA");
fputs($f,"$text");
fputs($f,"RSET");
fputs($f,"QUIT");
?>

Коннектится нормально, при трассировке выдает, что все пучком:
220 Mail.Ru ESMTP
250 mx20.mail.ru ready to serve

Но мыло не приходит.

D1mOn
28.01.2006, 22:56
$host="mxs.mail.ru";
Попробуй заменить на
$host="smtp.mail.ru";

errou
29.01.2006, 00:12
$host="mxs.mail.ru";
Попробуй заменить на
$host="smtp.mail.ru";
Я попробовал - то же самое. То есть он нормально коннектится к почтовому серваку, а дальше - ни ответа, ни привета.
И еще с этим скриптом неясно - при попытке прочтения из сокета более двух строк - скрипт не завершает работу.
То есть, если читать а-ля
while(!feof($f))
{
print(fgets($f));
} - подвисает, и все.

madnet
29.01.2006, 00:21
function mail($login, $passwd, $to, $subj, $text){
$fp=fsockopen("smtp.mail.ru", 25);
if($fp){
$post[]="HELO mail.ru\r\n";
$post[]="AUTH LOGIN ".base64_encode($login)."\r\n";
$post[]=base64_encode($passwd)."\r\n";
$post[]="MAIL FROM: ".$login."@mail.ru\r\n";
$post[]="RCPT TO: ".$to."\r\n";
$post[]="DATA\r\n";
$post[]="From: ".$login."@mail.ru\r\n";
$post[]="Date: ".date('r')."\r\n";
$post[]="To: ".$to."\r\n";
$post[]="Subject: ".$subj."\r\n";
$post[]="MIME-Version: 1.1\r\n";
$post[]="Content-type: text; charset=windows-1251\r\n";
$post[]="Content-Transfer-Encoding: 8bit\r\n";
$post[]="\r\n";
$post[]=$text."\r\n.\r\n";
$post[]="QUIT\r\n";
foreach($post AS $k=>$v)
{
fwrite($fp, $v);
if($k<7 || $k>14){$answ = fgets($fp, 128);}
}
fclose($fp);
}
}

errou
29.01.2006, 01:34
Спасибо огромное!

Trinux
01.02.2006, 10:18
2 madnet
Где-то я уже эту функцию видел %)))