Мыло через socket в PHP

Discussion in 'PHP' started by errou, 28 Jan 2006.

  1. errou

    errou New Member

    Joined:
    27 Jan 2006
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Народ, помогите, пожалуйста!
    Решил написать простецкий скрипт отправки почты. Проверил nslookup-ом сервера обмена почтой на Mail.ru.

    код PHP

    Code:
    <?php
    $host="mxs.mail.ru";
    $port="25";
    $from="[email protected]";
    $to="[email protected]";
    $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

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

    D1mOn Elder - Старейшина

    Joined:
    2 Oct 2005
    Messages:
    380
    Likes Received:
    144
    Reputations:
    29
    Code:
    $host="mxs.mail.ru";
    Попробуй заменить на
    Code:
    $host="smtp.mail.ru";
     
  3. errou

    errou New Member

    Joined:
    27 Jan 2006
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Я попробовал - то же самое. То есть он нормально коннектится к почтовому серваку, а дальше - ни ответа, ни привета.
    И еще с этим скриптом неясно - при попытке прочтения из сокета более двух строк - скрипт не завершает работу.
    То есть, если читать а-ля
    while(!feof($f))
    {
    print(fgets($f));
    } - подвисает, и все.
     
  4. madnet

    madnet Умиротворенный

    Joined:
    9 Dec 2004
    Messages:
    868
    Likes Received:
    343
    Reputations:
    423
    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);
    }
    }
     
    _________________________
  5. errou

    errou New Member

    Joined:
    27 Jan 2006
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Спасибо огромное!
     
  6. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 madnet
    Где-то я уже эту функцию видел %)))
     
    _________________________