Я пытаюсь написать простой клиент POP3 для Gmail в node.js. Сначала я написал один, в котором я ввожу команды POP3, и они отправляются на сервер, и сервер отвечает. Это нормально работает, потому что я могу дождаться ответа сервера, прежде чем вводить следующую команду.
Но я хочу сделать автоматический разговор, когда программа сама отправляет команды и ожидает собственных ответов. Просто делаю:
stream.write('USER ***&@gmail.com');
stream.write('PASS *****');
stream.write('LIST');
не работает из-за асинхронного характера потоков в node. Мне нужно дождаться события потока данных перед отправкой следующего сообщения, иначе ничего не произойдет. Итак, попробовал вот так:
var tls =require ('tls');
var stream = tls.connect(995,'pop.gmail.com', function() {
console.log ('Conexion establecida');
});
stream.on('data', function(data)
{
var str = data.toString();
console.log(str.substr(0,14));
if(str.substr(0,14)=="+OK Gpop ready")
{
console.log('Sending username...');
process.nextTick(function() {
stream.write ('USER ***********@gmail.com');
});
}
if(str.substr(0,14)=="+OK send PASS")
{
console.log('Recieving list of email...');
process.nextTick(function(){
stream.write('PASS *********');
});
}
});
Идея состоит в том, что прослушиватель событий data обрабатывает отправку следующей команды в зависимости от последнего полученного ответа. Опять же, выполнение только stream.write не помогло, поэтому я заключил вызовы write () в вызовы process.nextTick (). Кажется, что команда USER отправлена, а команда PASS - никогда. Может кто-нибудь сказать мне, почему? Или есть более эффективный способ сделать это? Спасибо за любую информацию.
substr
второй параметр - длина. У вас всего13
символов, но вы сравниваете14
. - person WiredPrairie   schedule 20.10.2013-ERR bad command
после отправкиUSER
- person WiredPrairie   schedule 20.10.2013