首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从自己的服务器向互联网发送电子邮件

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

Stack Overflow用户
提问于 2019-05-24 04:02:45
回答 5查看 2.1K关注 0票数 9

我已经在我的主机上设置了一个电子邮件服务器。它基本上是一个监听端口25的SMTP服务器。

代码语言:javascript
运行
复制
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发送邮件一样:)

EN

回答 5

Stack Overflow用户

发布于 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

票数 7
EN

Stack Overflow用户

发布于 2019-06-04 21:07:58

从技术上讲,您可以使用NodeMailer发送电子邮件。

代码语言:javascript
运行
复制
"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);
票数 1
EN

Stack Overflow用户

发布于 2019-06-05 08:54:41

正如Sohail在上面的回答中提到的,你可以使用NodeMailer (https://nodemailer.com/about/),它相当简单。下面是使用它的一个简单代码片段。此外,如果您正在寻找更高级的服务(例如SendGrid (https://sendgrid.com/)),还有其他提供免费级别的服务。

异步函数发送电子邮件(电子邮件、主机、email_body) {

代码语言:javascript
运行
复制
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;

}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56282201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档