2013-03-30 2 views
1

Я tring, чтобы отправить электронное письмо с PHP через telnet, но что-то не так.php smtp server

$telnet = array(); 
$telnet[0] = "telnet 10.0.50.6 25\r\n"; 
$telnet[1] = "HELO osiris.com\r\n"; 
$telnet[2] = "MAIL FROM:$replyTo\r\n"; 
$telnet[3] = "RCPT TO:$emailsTo\r\n"; 
$telnet[4] = "DATA\r\n"; 
$telnet[5] = "From:$headers<$replyTo> \r\n To:$emailsTo\r\n Subject:$emailSubject\r\n  $body\r\n\r\n .\r\n"; 

@$fp = fsockopen('10.0.50.6', 25); 

$count=0; 

if (!$fp){ 
echo 'connection fail'; 

return false; 
}else{ 


    foreach ($telnet as $current) {   
    fwrite($fp, $current); 
    $smtpOutput=fgets($fp); 
    $g=substr($smtpOutput, 0, 3); 


     if (!(($g == "220") || ($g == "250") || ($g == "354")|| ($g == "500"))) { 
     echo 'connection 2 fail'; 
      return false; 
    }else{ 
     $count=$count+1; 
     echo $count.'<br>'; 
     if ($count>5){ 
      fclose($fp); 
      return true; 
     } 
    } 

результат:

telnet 10.0.50.6 25 
220 afcc-ex-il1.rsa-otms.com Microsoft ESMTP MAIL Service ready at Sat, 30 Mar 2013 19:01:12 +0000 
220 
1 
HELO osiris.com 
500 5.3.3 Unrecognized command 
500 
2 
MAIL FROM:[email protected] 
250 afcc-ex-il1.rsa-otms.com Hello [10.0.70.22] 
250 
3 
RCPT TO:[email protected] 
250 2.1.0 Sender OK 
250 
4 
DATA 
250 2.1.5 Recipient OK 
250 
5 
From:cfir To:[email protected] Subject:test test 
354 Start mail input; end with . 
354 
6 
+0

И что «что-то» является тем, что мы здесь для угадывания? – dbf

+0

Hrm. Ну, если он вернет 500 на HELO, первое, что я попробую, это ELHO вместо этого, чтобы посмотреть, хочет ли он говорить только ESMTP. Но в сущности, на самом деле это выглядит так, что он достаточно доволен остальными вашими командами. Какие проблемы у вас на самом деле? –

ответ

0

У вас есть все правильно, но только один дополнительное пространство на следующей строке в \ г \ п \ г \ п

.
$telnet[5] = "From:$headers<$replyTo> \r\n To:$emailsTo\r\n Subject:$emailSubject\r\n  $body\r\n\r\n .\r\n";