【问题标题】:Sending emails using Mailgun with NodeMailer package使用带有 NodeMailer 包的 Mailgun 发送电子邮件
【发布时间】:2015-01-13 09:28:08
【问题描述】:

几天前,我意识到 Google 已经改变了 gmail 帐户的安全性,特别是从应用程序发送电子邮件的可能性。谷歌搜索了一段时间后,我找不到解决方法。 所以,我求助于使用 Mailgun。我创建了一个帐户并启用了业务验证。但是,我仍然无法发送电子邮件。我不断收到有关未找到请求的 URL 的错误消息。 我怀疑由于我还没有设置域,所以它没有选择默认提供的 mailgun 域。有人可以告诉我如何使用 NodeMailer 中的 Mailgun 测试发送电子邮件,指示 mailgun 提供的沙箱名称。

提前致谢 何塞

【问题讨论】:

    标签: node.js mailgun nodemailer


    【解决方案1】:
    var nodemailer = require('nodemailer');
    // send mail with password confirmation
    var transporter = nodemailer.createTransport( {
        service:  'Mailgun',
        auth: {
         user: 'postmaster@sandboxXXXXXXXXXXXXXXXX.mailgun.org',
         pass: 'XXXXXXXXXXXXXXXX'   
        }
    });
    var mailOpts = {
        from: 'office@yourdomain.com',
        to: 'user@gmail.com',
        subject: 'test subject',
        text : 'test message form mailgun',
        html : '<b>test message form mailgun</b>'
    };
    transporter.sendMail(mailOpts, function (err, response) {
        if (err) {
         //ret.message = "Mail error.";
        } else {
         //ret.message = "Mail send.";
        }
    });
    

    【讨论】:

    • 我什么时候可以通过 api_key/domain auth 使用它?还是非此即彼
    • 正是我想要的!不想使用api_key,因为它与不同项目的许多帐户相关联。高度不安全!
    • @Sebastialonso 你能解释一下为什么它不安全吗?
    • 因为任何人都可以看到密码。并且可以访问该帐户或使用该帐户执行任何操作。
    【解决方案2】:

    我创建了Nodemailer transport for mailgun。

    这里是它的工作原理。

    您使用 npm install 安装该软件包,就像使用任何软件包一样,然后在一个空文件中:

    var nodemailer = require('nodemailer');
    var mg = require('nodemailer-mailgun-transport');
    
    // This is your API key that you retrieve from www.mailgun.com/cp (free up to 10K monthly emails)
    var auth = {
      auth: {
        api_key: 'key-1234123412341234',
        domain: 'sandbox3249234.mailgun.org'
      }
    }
    
    var nodemailerMailgun = nodemailer.createTransport(mg(auth));
    
    nodemailerMailgun.sendMail({
      from: 'myemail@example.com',
      to: 'recipient@domain.com', // An array if you have multiple recipients.
      subject: 'Hey you, awesome!',
      text: 'Mailgun rocks, pow pow!',
    }, function (err, info) {
      if (err) {
        console.log('Error: ' + err);
      }
      else {
        console.log('Response: ' + info);
      }
    });
    

    用您的 API 密钥替换您的 API 密钥并更改详细信息,您就可以开始了!

    【讨论】:

    • 注意这个 'nodemailer-mailgun-transport' 不可能将 nodemailer 的 icalEvent 添加到电子邮件消息 (nodemailer.com/message/calendar-events/…),最好使用 nodemailer.createTransport(...) 来这样做。
    • 该域是组成的还是?
    【解决方案3】:

    当我将域也添加到身份验证对象(不仅是 api_key)时,它对我有用。像这样:

    var auth = {
      auth: {
        api_key: 'key-12319312391',
        domain: 'sandbox3249234.mailgun.org'
      }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-04
      • 2019-05-21
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多