SMTP服务器npm无法接收邮件数据

时间:2017-09-07 23:42:52

标签: javascript node.js npm smtp postfix

我在几个小时内一直在寻找我的问题的答案。我认为这个问题(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上。我不知道。

你能帮我吗?

先谢谢你了!

1 个答案:

答案 0 :(得分:1)

我可能会迟到回答,但我在几个小时前写这个答案时遇到了类似的问题。回答希望将来有人会发现它有帮助...

根据 SMTP 标准,它在实际发送正文之前发送 mailformrcptto 命令。因此,在这个 nodeJs 库中,处理程序方法等效于这些命令 {{1} } -> mailfrom & onMailFrom(...) -> rcptto 正在被调用,并且期望调用 onRcptTo(...) 以便在连接的 SMTP 套接字上发送成功信号。

就我而言,我编写了一个空处理程序,并没有在 callback()callback 上调用 onMailFrom。这就造成了问题。

从上述处理程序调用回调修复了它。

我遇到问题时的代码示例:

onRcptTo

我调用 . . . onMailFrom: (address, session, callback) => {}, onRcptTo: (address, session, callback) => {}, . . 时的代码示例:

callback

添加注释:如果此解决方案不起作用,请检查其他处理程序函数。调试帮助我在这里确定了我的案例中的问题。