【问题标题】:Send E-Mails using javascript within a domain在域内使用 javascript 发送电子邮件
【发布时间】:2020-06-05 13:54:48
【问题描述】:

在域内从 javascript 发送电子邮件的最安全和最优雅的方式是什么? 我们有自己的邮件服务器,我试图避免使用 3rd 方 API 作为 smtpjs 或 emailjs。 这可能吗?

【问题讨论】:

  • @BenM 问题陈述:我试图避免使用 3rd 方 API 作为 smtpjs 或 emailjs。

标签: javascript html-email


【解决方案1】:

您不能仅通过 JavaScript 发送电子邮件。您可以通过window.open('mailto:{{to_address}}') 在用户设备上打开邮件客户端,或者通过调用托管在服务器上的API(使用nodejsmandrill 可以解决此问题)。有关如何做到这一点的示例,有一个非常详尽的代码示例 here

【讨论】:

    【解决方案2】:

    在nodejs中你可以使用nodemailer来连接你的邮件服务器并发送邮件。

    这是一个示例代码(来自Nodemailer's Docs):

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 2012-10-15
      • 2021-05-15
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多