将电子邮件从自己的服务器发送到互联网



我已经在主机上设置了电子邮件服务器。这基本上是一台在端口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帐户发送邮件:(

您需要一个MTA(邮件传输代理(才能发送电子邮件。

因此,流行的选项是: Postfix ,在这里,如何在Ubuntu上设置Postfix:https://help.ubuntu.com/community/postfix

或者您可以旋转一个Docker容器,例如:https://hub.docker.com/r/bytemark/smtp/

然后,您可以使用nodemailer通过Postfix或Docker实例发送电子邮件。

,如果您想要一个完整的堆栈Docker图像,所有电池包括:https://github.com/tomav/docker-mailserver

从技术上讲,您可以使用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);

正如上面答案中提到的Sohail所述,您可以使用NodeMailer(https://nodemailer.com/about/(,并且相当简单。以下是使用它的简单代码段。此外,如果您正在寻找更高的服务(示例是sendgrid(https://sendgrid.com/((。

async函数sendemail(电子邮件,主机,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;

}

为了发送电子邮件,您需要电子邮件客户端,而不是服务器。编写客户端通常比编写服务器更容易,因此您可以做到这一点。如果您不想写自己的文章,则可以使用MTA(例如Postfix(,该MTA既包含客户端和服务器。

您可以通过在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存储库中获取更多样本和文档。

相关内容

最新更新