我有一个简单的脚本接收电子邮件,即使它接收电子邮件和打印好,不幸的是,不响应发送服务器,(没有250OK)作为一个结果发送服务器不断发送相同的电子邮件(重试)
需要做出哪些响应或可能存在哪些错误?
在这个设置中,这段代码在我的本地网络(OsX)中运行,我的路由器的端口25转发到我的机器。
const SMTPServer = require("smtp-server").SMTPServer;
const parser = require("mailparser").simpleParser
const server = new SMTPServer({
onData(stream, session, callback) {
parser(stream, {}, (err, parsed) => {
if (err){
console.log("Error:" , err)
}
eMailParse(parsed)
stream.on("end", callback)
})
},
disabledCommands: ['AUTH']
});
server.listen(25, "192.168.50.20")
console.log("Mail Server Running");
function eMailParse(parsed){
const {headers, from, to, cc, date, html, text, messageId} = parsed;
console.log("\n//############# New Mail #############\n")
console.log(messageId)//Unique Mail ID;
console.log("\n//$$$$$")
console.log(from)
console.log(to)
console.log(cc)
console.log(date)
console.log(text)
console.log("//====")
console.log(html)
}
Gmail的回应
收件人服务器未接受我们的连接请求。有关详细信息,请访问https://support.google.com/mail/answer/7720 [dc-133a13304d09.********. fun. nn. nnn. nn:超时]
远程登录响应
421超时-关闭连接连接被外部主机关闭。
3条答案
按热度按时间hpcdzsge1#
过了一会儿,我又试了一会儿,我找到了解决办法。
这部分不行了
相反;
就像个护身符。
rryofs0p2#
我最近遇到了同样的问题。我找到了这个线程,答案对我也有效,但后来我发现了真实的的问题--“end”事件的侦听器应该立即附加在onData回调中,而不是在解析器回调中。下面是解决方案:
xmjla07d3#
当您使用
stream.on("end", callback)
注册“end”监听器时,“end”事件已经发生,因此该事件监听器不会被触发,也不会进行回调。这是因为
parser(stream, {}, callback_fcn)
中的回调函数(另请参见下面代码中的注解)* 在 * 解析器完成流的使用后调用(或在出现错误之后)。因此,在我们进入(err, parsed) => {\\function body}
的函数体的点,流已经结束。并且在我们通过执行stream.on("end", callback)
注册“end”侦听器时,“结束”事件已经发生,因此监听器将永远不会触发。您最终的解决方案是有效的,因为您现在是在解析器完成(因此流结束)之后调用回调函数。
最好的方法还应该将
callback
调用为callback(null, "Success message")
或callback(err)
,在解析或其他过程中出现错误的情况下,可以适当地设置err.responseCode
。