我已经在我的主机上设置了一个电子邮件服务器。它基本上是一个监听端口25的SMTP服务器。
const recvServer = new SMTPServer({
requireTLS: true,
authOptional: true,
logger: true,
onConnect(session, callback) {
return callback();
},
onMailFrom(address, session, callback) {
console.log('from', address, session);
return callback();
},
onData(stream, session, callback) {
console.log('new msg');
let message = '';
stream.on('data', chunk => {
message += chunk;
});
stream.on('end', () => {
callback(null, 'Message queued');
simpleParser(message)
.then(parsed => {
console.log(parsed);
// here I wish to forward the message to outside gmail addresses
})
.catch(err => {
console.log(ee)
});
});
}
});
recvServer.listen(25);
recvServer.on('error', err => {
console.log(err.message);
});
它可以很好地接收来自外部的电子邮件,比如gmail等。
但我也希望能够向外部发送电子邮件,或者将我收到的电子邮件转发到一些gmail地址。
我知道我可以使用Gmail SMTP服务器做到这一点,但我需要一个gmail帐户和密码。
我希望能够使用自己的服务器发送电子邮件,就像yahoo使用自己的服务器而不是gmail帐户向gmail发送邮件一样:)
发布于 2019-06-01 01:29:13
您需要MTA (邮件传输代理)才能发送电子邮件。
所以流行的选项是: postfix ,这里是如何在ubuntu上设置postfix的guid:https://help.ubuntu.com/community/Postfix
或者您可以启动一个停靠容器,如:https://hub.docker.com/r/bytemark/smtp/
然后,您可以使用nodemailer
通过后缀或docker实例发送电子邮件。
如果你想要的话,这里有一个包含所有电池的全栈扩展坞镜像:https://github.com/tomav/docker-mailserver
发布于 2019-06-04 21:07:58
从技术上讲,您可以使用NodeMailer发送电子邮件。
"use strict";
const nodemailer = require("nodemailer");
// async..await is not allowed in global scope, must use a wrapper
async function main(){
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
let testAccount = await nodemailer.createTestAccount();
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: testAccount.user, // generated ethereal user
pass: testAccount.pass // generated ethereal password
}
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: '"Fred Foo " <foo@example.com>', // sender address
to: "bar@example.com, baz@example.com", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world?", // plain text body
html: "<b>Hello world?</b>" // html body
});
console.log("Message sent: %s", info.messageId);
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}
main().catch(console.error);
发布于 2019-06-05 08:54:41
正如Sohail在上面的回答中提到的,你可以使用NodeMailer (https://nodemailer.com/about/),它相当简单。下面是使用它的一个简单代码片段。此外,如果您正在寻找更高级的服务(例如SendGrid (https://sendgrid.com/)),还有其他提供免费级别的服务。
异步函数发送电子邮件(电子邮件、主机、email_body) {
let transporter = nodemailer.createTransport({
host: "mail.example.com.au",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: "test@example.com.au", // generated ethereal user
pass: "email_password" // generated ethereal password
}
});
let emailBody = email_body // This is the body of your email which is more or less a String
let info = await transporter.sendMail({
from: '" Name of sender" <test@example.com.au>', // sender address
to: email, // list of receivers
subject: "Email Subject", // Subject line
text: emailBody, // plain text body
// html: // html body
});
console.log("Message sent: %s", info.messageId);
return true;
}
https://stackoverflow.com/questions/56282201
复制相似问题