我已经在主机上设置了电子邮件服务器。它基本上是一个侦听端口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一样:)
答案 0 :(得分:1)
您需要MTA(邮件传输代理)才能发送电子邮件。
因此流行的选项是: Postfix ,这是如何在ubuntu上设置Postfix的指南:https://help.ubuntu.com/community/Postfix
或者您可以启动一个类似https://hub.docker.com/r/bytemark/smtp/
的Docker容器然后,您可以使用ArrayList
通过后缀或docker实例发送电子邮件。
如果您想要一个完整的docker镜像,则包括所有电池:https://github.com/tomav/docker-mailserver
答案 1 :(得分:1)
从技术上讲,您可以使用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);
答案 2 :(得分:1)
如上述答案中的Sohail所述,您可以使用NodeMailer(https://nodemailer.com/about/)及其相当简单的方法。以下是使用它的简单代码段。此外,如果您正在寻找更高级的服务,还有其他服务可提供免费套餐(例如SendGrid(https://sendgrid.com/)。)。
异步函数sendemail(email,host,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;
}
答案 3 :(得分:1)
您可以通过在SendGrid中创建一个帐户,然后使用其Node.js api发送电子邮件来解决此功能。
这些步骤是:-
npm install @sendgrid/mail
然后使用下面的代码片段:-
const mailer = require('@sendgrid/mail');
mailer.setApiKey(<YOUR_SENDGRID_API_KEY>);
const message = {
to: 'xyz@gmail.com',
from: 'abc@gmail.com',
subject: 'hello world',
text: 'hello world'
};
mailer.send(message);
您可以在其Github repo中获得更多示例和文档。
答案 4 :(得分:0)
要发送电子邮件,您需要一个电子邮件客户端,而不是服务器。编写客户端通常比编写服务器容易,因此您可以这样做。如果您不想自己编写,则可以使用MTA(如Postfix),它将同时包含客户端和服务器。