此代码段尝试向不需要身份验证的同一网络上的内部SMTP服务器发送电子邮件:
var transporter = nodemailer.createTransport({
host: "smtp.example.com",
port: 25,
secure: false
});
var mailOptions = {
'from': 'noreply@example.com',
'to': 'someone@example.com',
'subject': 'test email',
'text': 'some text for a body',
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
// do something
} else {
// do something else
}
});
以下是我们正在执行ad hoc测试的替代脚本(VBScript)。
Set objMail=CreateObject("CDO.Message")
objMail.From="noreply@example.com"
objMail.To="someone@example.com"
objMail.Subject="Test from new server"
objMail.TextBody = "This is a message."
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.example.com"
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25
objMail.Configuration.Fields.Update
objMail.Send
Set objMail=nothing
setInterval()
以尝试每分钟向Nodemailer发送一次电子邮件。有时会发送电子邮件,但更多时候我们会收到以下错误。
{ Error: connect ETIMEDOUT XXX.XXX.XX.XX:25
at Object.exports._errnoException (util.js:1020:11)
at exports._exceptionWithHostPort (util.js:1043:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14)
code: 'ECONNECTION',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: 'XXX.XXX.XX.XX',
port: 25,
command: 'CONN' }
答案 0 :(得分:0)
原来这是由我的申请外的问题引起的。因此,我正在回答原始问题集的以下部分,以防其他人得到相同的错误消息/遇到相同的间歇性行为,并在她/他的应用程序之外寻找可能的原因:“[w] hat会导致这个问题行为?我应该问我的系统/网络管理员如何调查?“
在我的示例中,host
参数设置为“smtp.example.com”(当然,这不是真正的主机名)。在我们的网络上,我给出的主机名可以解析为两个IP地址中的任何一个。当它解析为一个IP地址时,到达SMTP服务器并接受该消息进行排队。当它解析为其他IP地址时,未到达SMTP服务器并且结果是timedout错误。
在网络管理员发现问题之前,我正在跳过主机名并直接发送到有效的IP地址。