【问题标题】:SMTP-server npm does not receive the mail dataSMTP-server npm 没有收到邮件数据
【发布时间】:2018-02-16 19:07:17
【问题描述】:

我一直在寻找我的问题的答案。我认为这个问题(Send email to localhost smtp server in Node.js)完全一样,但答案对我没有帮助。

所以我有两个在 Centos7 上运行的虚拟机。我希望我的 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

,我可以看到“hello”“received”

来自 VM 1: 当我使用 sendmail(通过 postfix 自动中继到我的 VM2)发送邮件时:

sendmail ldecaudin@[192.168.56.101] < email.txt

我只能看到"hello",所以连接正在运行,但是我无法传入"onData"函数来获取我的流需要。

同样来自我的 VM1,我有一个使用 nodemailer 发送邮件的节点代码,此代码有效。当我使用这段代码时,我得到了相同的结果(“hello”但不是“received”),但是有 2 个连接而不是 1 个。

所以我完全迷失了,我尝试添加“onAuth”功能,尝试“新SMTPServer”的许多选项。

我想知道这是否是端口的问题(但端口 25 是开放的!),或者我可能忘记在 Postfix 上放一些东西。我不知道。

你能帮帮我吗?

非常感谢您!

【问题讨论】:

  • 您找到解决此问题的方法了吗?我会很高兴听到它,因为我正在解决同样的问题:)
  • 不,我从来没有找到,对不起:/

标签: javascript node.js npm smtp postfix


【解决方案1】:

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

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

在我的例子中,我写了一个空处理程序并且没有在onMailFromonRcptTo 上调用callback。这造成了问题。

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

遇到问题时的代码示例:

.
.
.
onMailFrom: (address, session, callback) => {},
onRcptTo: (address, session, callback) => {},
.
.

我打电话给callback时的代码示例:

.
.
.
onMailFrom: (address, session, callback) => {
    return callback();
},
onRcptTo: (address, session, callback) => {
    return callback();
},
.
.
.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2016-09-30
    • 2019-07-16
    • 2019-07-30
    • 2015-10-15
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多