如何创建自定义smtp服务器以在Nodejs中发送通知电子邮件?

时间:2016-10-12 16:45:29

标签: node.js email npm smtp mail-server

我的要求是从我的应用程序向任何电子邮件ID发送通知电子邮件,例如:gmail地址。我浏览了一些模块,如smtp-serversmtp-connectionemailjs

这就是我现在所拥有的。

var SMTPServer = require('smtp-server').SMTPServer

var server = new SMTPServer({
  name: 'testDomain.com',
  authOptional: true,
  onAuth: function (auth, session, callback) {
    callback(null, {user: 'sample-user'}) 
  }
})
server.on('error', function (err) {
  console.log('Error %s', err.message)
})

var port = 1234

server.listen(port, function () {
  console.log('SERVER: Listening on port: ' + port)
  var opts = {
    host: '127.0.0.1',
    port: port,
    username: 'testUser',
    password: 'testUser123',
    to: 'someUser@gmail.com'
  }
  sendEmail(opts,function (err, message) {
    server.close()
  })
})

其中sendEmail是使用emailjs的函数。

 function sendEmail(opts,callback) {
  var server = email.server.connect({
    user: opts.username || '',
    password: opts.password || '',
    host: opts.host,
    ssl: false
  })

  server.send({
    text: 'i hope this works',
    from: 'you <'+opts.username+'@testDomain.com>',
    to: ' <'+opts.to+'>',
    subject: 'testing emailjs'
  }, function (err, message) {
     console.log(err || message);
     callback(err, message)
    })
}

但似乎客户端无法连接到服务器。它挂了。

我最初尝试过这样的smtp-connection:

var connection = new SMTPConnection({
    port: port,
    host: '127.0.0.1',
    ignoreTLS: true
  })

  connection.connect(function () {
    var envelope = {
       from: opts.username+'@testDomain.com',
       to: opts.to
    }
    var message = "Hello!!!"
    connection.send(envelope, message, function(err,message){
      callback(err,message)
      connection.quit()

    })

这似乎有效,但提供了此输出

response: '250 OK: message queued'

smtp-connection文档说它只会将消息排队,而不会将消息传递给收件人。

我如何达到我的要求?我试图从自定义邮件服务器发送通知,因为我想避免在明文代码中添加电子邮件帐户的用户凭据。我正在寻找一个简单的邮件服务器,可以在需要发送通知然后关闭时启动它。

我完全偏离了轨道,不了解邮件服务器的运作方式吗?请提供一些反馈和解决此问题的最佳方法。

1 个答案:

答案 0 :(得分:0)

只是我的意见,但我认为最好采取一个单独的邮件服务器。 就像nodemailer中的例子一样:

JOIN mae_cuentas ON (mae_cuentas._id = mae_movintos._id )

为安全起见:

  • 您可以使用单独的文件存储用户名/密码。

  • 使用可以使用基于令牌的身份验证。所以你不需要保存密码。这方面的一个例子是OAuth。而不是使用令牌进行身份验证的密码。这个令牌来自邮件服务提供商(如gmail)。 使用oauth和nodemailer的示例,您可以找到here