Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Мыло через socket в PHP (https://forum.antichat.xyz/showthread.php?t=13634)

errou 28.01.2006 22:16

Мыло через socket в PHP
 
Народ, помогите, пожалуйста!
Решил написать простецкий скрипт отправки почты. Проверил 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

Цитата:

Сообщение от D1mOn
Код:

$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
Где-то я уже эту функцию видел %)))


Время: 21:54