나는 node.js에 Gmail 용 간단한 POP3 클라이언트를 쓰려고합니다. 나는 처음에 POP3 명령을 입력 한 곳에서 서버에 보낸 다음 서버가 응답합니다. 다음 명령을 입력하기 전에 서버의 응답을 기다릴 수 있기 때문에이 작동합니다.gmail 및 node.js와 POP3 대화
하지만 자동 대화를 만들고 싶습니다. 프로그램 자체에서 명령을 보내고 응답을 기다리고 있습니다. 단순히 다음을 수행하십시오.
stream.write('USER ***&@gmail.com');
stream.write('PASS *****');
stream.write('LIST');
노드의 스트림 비동기 특성으로 인해 작동하지 않습니다. 다음 메시지를 보내기 전에 스트림의 'data'이벤트를 기다려야합니다. 그렇지 않으면 아무것도 일어나지 않습니다. 그래서 다음과 같이 그것을 시도 :
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 *********');
});
}
});
아이디어는 '데이터'이벤트 리스너가 받았습니다 마지막 응답에 따라 다음 명령의 전송 처리하는 것입니다. 다시 한 번, stream.write만으로는 작동하지 않는 것 같아서 process.nextTick() 호출에서 write() 호출을 래핑했습니다. USER 명령이 보내졌지만 PASS 명령은 보내지지 않은 것으로 보입니다. 누군가 왜 저에게 말할 수 있습니까? 아니면 더 효과적인 방법이 있다면? 어떤 정보에 감사드립니다.
를 참고하시기 바랍니다 :'길이가 두 번째 매개 변수입니다 substr'. 당신은'13' 문자 만 받았지만'14'를 비교하고 있습니다. – WiredPrairie
고마워요.하지만 고친 후에도 아무 것도 보내지지 않고 있습니다. – tutiplain
'USER '를 보낸 후'-ERR bad command'를 시도했습니다. – WiredPrairie