Проблема с SMTP

Olegan

Новичок
Проблема с SMTP

Доброго времени суток всем! Товарищи, огромная просьба: помогите. Задача такая: надо на PHP реализовать отправку письма с аттачем ИСПОЛЬЗУЯ ТОЛЬКО СОКЕТЫ И ПРОТОКОЛ SMTP. Вроде не так сложно, но получается полная херня. Вот код:
$fp = fsockopen ("localhost",25,$errno, $errstr);
if(!$fp)echo $errstr;
else {
fputs($fp, "HELO localhost\r\n");
echo fread($fp,1024);
fputs($fp, "MAIL FROM: Oleg\n";);
echo fread($fp,1024);
/*fwrite($fp, "RCPT TO:[email protected]\r\n");
echo "eto rcpt to ";
echo fread($fp,1024);
echo "<br>";
fputs($fp, "DATA\r\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "Content-Type: text/plain; charset=UTF-8\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "From: Oleg\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "To: Mike\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "Subject: Hello\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "\n\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "Hello\r\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, ".\r\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "RSET\r\n");
echo fread($fp,1024);
echo "<br>";
fputs($fp, "QUIT\r\n");
echo fread($fp,1024);
echo "<br>";*/
}
Проблема в том: юзаю Small Http Server, так вот конект к серверу и отправка Helo проходят нормально, а вот команда MAIL FROM не хочет отправляться!! То есть в логах сервера ее нету!!! После этого делать дальше бессмысленно. В чем дело? Помогите. Огромное спасибо.
:confused:
 

Olegan

Новичок
tony2001
Получил такой ответ:
250-shttp.srv 250-8BITMIME 250 SIZE=1048576
А можно поподробнее?Спасибо.
 

Кром

Новичок
Olegan
Начни с того, что проделай коннект и отправку письма через телнет, с записью сессии в лог. Потом просто подставишь нужные значиния в скрипт.
Да, помимо этого есть PEAR и т.д.
 

Olegan

Новичок
Кром
А как это сделать телнетом в пхп? Обьясните пожалста, я очень хочу разобрацца в чем дело. Спасибо.
 

Кром

Новичок
Это не делается "телнетом в пхп". Это делается ручками.
Start > Run
cmd
telnet localhost 25
и вперед. Пишешь команды.
 

Olegan

Новичок
Кром
не , это я уже все поняял, тока делаю через патти. Проблема в другом: вот создал я в Small Http Server пользователя с правами на смтп, задал его папку как поддиректорию корневой для сервера, пишу:
mail from: oleg@localhost
в упор не видит ни одного юзера. А еще в настройках есть имя домена смтп, отдельное, с ним тож пробовал, фигня. Подскаите пожалуйста. Спасибо большое.
 

Кром

Новичок
Если у тебя проблема с mail сервером, то лучше спросить у техподдержки данного сервера. Эти программы к php никакого отношения не имеют.
 

Alexandre

PHPПенсионер
и у меня проблема

отправляю письмо телнетом - все ОК
Код:
HELO
MAIL FROM: [email][email protected][/email]
RCPT TO:  [email][email protected][/email]
DATA
test test test

.
QUIT
а с пхп проблема
PHP:
        $fp = fsockopen( 'xxx.xxx.xxx.xxx',  25 , $errno, $errstr, 3);
        if (!$fp){
            print "\nunable to connect to ". $this->Host;
            print "\n $errstr";
            return false;
        } else print 'OK 1';

        if (fwrite($fp,  "HELO\n" ) === FALSE) {
            echo "Cannot write to socket";
            exit;
        }
        else print ' OK 2';

    fwrite($fp,  "MAIL FROM: [email]test@tуые.ru[/email]\n" );
    fwrite($fp,  "RCPT TO:  [email][email protected][/email]\n" );
    fwrite($fp,  "DATA\n" );
    fwrite($fp,  "\n" );

    $resp = 'test 2 test 2 test';
    fwrite($fp,  "$resp\n\n" );
    fwrite($fp,  ".\n" );
    fwrite($fp,  "QUIT\n" );

    fclose( $fp);
если выходной поток вместо сокета в текстовый фай, а потом его ввожу в телнет (copy/paste) то все отправляется.
при этом сообщения выводятся OK 1 OK 2, т.е. в сокет что-то пишется и ошибки нет.

чего не хватает
 

slach

Новичок
после каждого fwrite
не плохо было бы получить fread и посмотреть статус ответов SMTP сервера
 

Alexandre

PHPПенсионер
делаю перенаправление
Код:
# php mimemail.test.php | telnet <host><port>
Trying xx.xx.xx.xx ...
Connected to ns.xxl.ru.
Escape character is '^]'.
220 sendout-h Microsoft ESMTP MAIL Service, Version: 6.0.3790.0 ready at  Tue, 22 Aug 2006 18:15:42 +0400
Connection closed by foreign host.
однако письмо не приходит

-~{}~ 22.08.06 19:19:

не плохо было бы получить fread и посмотреть статус ответов SMTP сервера
поставил fread
выдает только строку - далее переходит в режим ожидания ввода.
Код:
220 sendout-h Microsoft ESMTP MAIL Service, Version: 6.0.3790.0 ready at  Tue, 22 Aug 2006 19:12:44
220- служба готова к работе

-~{}~ 23.08.06 13:12:
решение проблемы
PHP:
fputs($fp, $command);
$response = fgets($fp,1);
$bytes_left = socket_get_status($fp);
if ($bytes_left > 0) { $response .= fread($fp, $bytes_left["unread_bytes"]); }
 
Сверху