gpt4 book ai didi

node.js - 如何在 Nodejs 中创建自定义 smtp 服务器来发送通知电子邮件?

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:17 24 4
gpt4 key购买 nike

我的要求是从我的应用程序向任何电子邮件 ID 发送通知电子邮件,例如:gmail 地址。我浏览了一些模块,例如 smtp-server , smtp-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 连接:

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 文档说它只对邮件进行排队,不会将其传递给收件人。

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

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

最佳答案

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

var nodemailer = require('nodemailer');

// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport('smtps://user%40gmail.com:pass@smtp.gmail.com');

// setup e-mail data with unicode symbols
var mailOptions = {
from: '"Fred Foo ?" <foo@blurdybloop.com>', // sender address
to: 'bar@blurdybloop.com, baz@blurdybloop.com', // list of receivers
subject: 'Hello ✔', // Subject line
text: 'Hello world ?', // plaintext body
html: '<b>Hello world ?</b>' // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});

为了安全:

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

  • 使用可以使用基于 token 的身份验证。所以你不需要保存密码。 OAuth 就是一个例子。您使用 token 而不是密码进行身份验证。您从邮件服务器提供商(例如 gmail)获得此 token 。您可以找到 oauth 和 nodemailer 的使用示例 here .

关于node.js - 如何在 Nodejs 中创建自定义 smtp 服务器来发送通知电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com