我在几个小时内一直在寻找我的问题的答案。我认为这个问题(Send email to localhost smtp server in Node.js)完全相同,但答案对我没有帮助。
所以我有两个在Centos7上运行的VM。我希望我的VM 1能够向我的VM发送电子邮件2.这就是我所做的:
VM 1:使用它安装和配置Postfix:relayhost = [ip of vm 2]:25
VM 2:端口25已打开。有端口25监听的代码:
'use strict'
const fs = require('fs-extra')
const SMTPServer = require('smtp-server').SMTPServer
const simpleParser = require('mailparser').simpleParser
const date = require('date-and-time')
const builder = require('xmlbuilder') //9.0.4
const say = msg => {
console.log(msg)
}
const server = new SMTPServer({
logger: true,
//secure: true,
//authOptional: true,
//disabledCommands: ['AUTH'],
disabledCommands: ['AUTH', 'STARTTLS'],
// By default only PLAIN and LOGIN are enabled
authMethods: ['PLAIN', 'LOGIN', 'CRAM-MD5'],
onConnect: function(session, callback){
say('hello')
callback()
},
onData: function(stream, session, callback) {
say('received');
callback()
},
})
server.on('error', err => {
say('Error %s', err.message)
})
server.listen(25)
来自VM 2:当我使用sendmail向locahost发送邮件时:
sendmail ldecaudin@localhost < email.txt
,我可以看到“你好”而“收到”
来自VM 1:当我使用sendmail发送邮件(通过postfix自动转发到我的VM2)时:
sendmail ldecaudin@[192.168.56.101] < email.txt
我只能看到“hello”,所以连接正在运行,但是我无法传入“onData”函数来获取流I需要。
同样来自我的VM1,我有一个使用nodemailer发送邮件的节点代码,这段代码可行。当我使用这个代码时,我有相同的结果(“你好”但不是“收到”),但有2个连接而不是一个。
所以我完全迷失了,我试图添加“onAuth”功能,尝试“新SMTPServer”的许多选项。
我想知道这是一个端口的问题(但是端口25是打开的!),或者我忘了把东西放在Postfix上。我不知道。
你能帮我吗?
先谢谢你了!
答案 0 :(得分:1)
我可能会迟到回答,但我在几个小时前写这个答案时遇到了类似的问题。回答希望将来有人会发现它有帮助...
根据 SMTP 标准,它在实际发送正文之前发送 mailform
、rcptto
命令。因此,在这个 nodeJs 库中,处理程序方法等效于这些命令 {{1} } -> mailfrom
& onMailFrom(...)
-> rcptto
正在被调用,并且期望调用 onRcptTo(...)
以便在连接的 SMTP 套接字上发送成功信号。
就我而言,我编写了一个空处理程序,并没有在 callback()
和 callback
上调用 onMailFrom
。这就造成了问题。
从上述处理程序调用回调修复了它。
我遇到问题时的代码示例:
onRcptTo
我调用 .
.
.
onMailFrom: (address, session, callback) => {},
onRcptTo: (address, session, callback) => {},
.
.
时的代码示例:
callback
添加注释:如果此解决方案不起作用,请检查其他处理程序函数。调试帮助我在这里确定了我的案例中的问题。