【发布时间】:2017-09-11 10:48:45
【问题描述】:
tl;dr:Mail-listener2 似乎超时,我想继续收听电子邮件,而不需要重新启动我的脚本。
我在我的 node.js 项目中使用 mailer-listerner2 包 (https://github.com/chirag04/mail-listener2/)。我想不断收听到达特定收件箱的电子邮件,然后解析这些电子邮件以进行进一步处理。
我已经建立了连接并且我的解析工作正常,但是我看到 imap 连接似乎超时,或者至少对到达的新电子邮件没有响应。
由于 mail-listener2 包依赖于 imap npm 包,我查看了代码并尝试减少 IDLE 计时器,以便它每 10 秒而不是每 10 秒向 imap (gmail) 服务器发送一次请求30 分钟。
这确实改善了情况,但是今天早上醒来检查日志时,我看到以下内容:
<= 'IDLE OK IDLE terminated (Success)'
=> 'IDLE IDLE'
<= '+ idling'
=> DONE
<= 'IDLE OK IDLE terminated (Success)'
=> 'IDLE IDLE'
<= '+ idling'
[connection] Ended
[connection] Closed
连接结束并关闭似乎来自核心 imap 模块。我认为发送 IDLE 检查可以确保不会发生断开连接,但正如您所见,情况并非如此。
我也尝试过查看 Noop,但它似乎会导致邮件被阅读两次的其他问题。
我知道如果我的计时器太低,例如每隔几秒钟,由于调用阻塞服务器响应,这可能会导致邮件不断被解析,这可能就是我看到上面的 Noop 问题的原因。
不想继续尝试这个,我想知道其他人是否遇到了这个问题并克服了?
【问题讨论】:
-
如果连接关闭,为什么不尝试重新连接?连接关闭的原因有很多。
-
是的 - 我试过了,但似乎没有用:mailListener.on('server:disconnected', () => { console.log('imapDisconnected'); mailListener.stop() ; mailListener.start(); });
-
看起来好像其他人也有同样的问题,并为我重新启动 github.com/waqassiddiqi/mail-listener2/commit/…
-
您应该处理重新连接,或者至少使用
forever或pm2之类的东西来保持脚本运行,即使它失败了。您可以发布您传递给邮件侦听器的参数吗? -
是的,看起来唯一有意义的变化是超时和调用重启,也许你可以使用它