javascript - 与 gmail 和 node.js 的 POP3 对话

标签 javascript node.js pop3 gmail-pop

我正在尝试在 node.js 中为 gmail 编写一个简单的 POP3 客户端。我最初写了一个我输入 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 *********');
        });
    }
});

这个想法是“数据”事件监听器根据收到的最后一个回复处理下一个命令的发送。同样,单独执行 stream.write 似乎不起作用,所以我将 write() 调用包装在 process.nextTick() 调用中。似乎发送了 USER 命令,但从未发送过 PASS 命令。有人能告诉我为什么吗?或者是否有更有效的方法来做到这一点?感谢您提供任何信息。

最佳答案

您的命令正在发送,但未被识别,因为它们缺少表示命令结束的换行符。在命令末尾添加一个换行符应该可以正常工作。

此外,您可以通过像这样实现一个队列来简化您的命令:

var tls = require('tls');
var commands = [];

commands.push('USER ***********@gmail.com\n');
commands.push('PASS *********\n');

var stream = tls.connect(995, 'pop.gmail.com', function () {
    console.log('Conexion establecida');
});

stream.on('data', function (data) {
    if (data.toString().indexOf('OK') > -1 && commands.length) {
        stream.write(commands.shift());
    }
});

关于javascript - 与 gmail 和 node.js 的 POP3 对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477271/

相关文章:

delphi - Indy POP3 定期接收电子邮件

visual-studio - 以编程方式配置 Outlook 邮件设置?

javascript - 如何更改 CKEditor 中已注册的对话框

javascript - 如何在 HTML 中使图像适合边框并保持宽高比

javascript - 使用reduce 对通过控制台日志传递的数组的所有值求和

node.js - npm global 没有被使用?

javascript - 将 div 定位在同一位置

node.js - 使用 Pug 模板时出现意外标记 "indent"

ios - 使用 Node.js 列出 Firebase iOS 应用程序中的所有用户

java - 连接到本地 POP3 收件箱 Java