是否可以在nodemailer中动态设置发件人地址?

时间:2018-02-08 15:57:38

标签: node.js smtp nodemailer

我正在使用nodemailer从联系表单发送自己的电子邮件作为我的应用程序的一部分。我将它设置为SendPulse作为SMTP服务器。我想像这样创建消息:

const transporter = nodemailer.createTransport(
  {
    service: 'SendPulse',
    auth: {
      user: 'myemail@myemail.com',
      pass: 'mypassword'
    }
  }
);

app.post('/send-message', (req, res) => {
  transporter.sendMail(
    {
      from: req.body.email,
      to: 'myemail@myemail.com',
      subject: req.body.subject,
      text: req.body.message,
      html: `<p>${req.body.message}</p>`
    },
    (err, info) => {
      if (err) {
        res.send(err);
      } else {
        res.send(info);
      };
    }
  );
});

问题是除非req.body.email与在传输器上注册的myemail@myemail.com相同,否则我会收到错误:

{
  code: "EENVELOPE",
  response: "554 5.9.2 Sender domain is not valid.",
  responseCode: 554, command: "MAIL FROM"
}

有什么办法可以将from属性设置为联系表单中输入的内容吗?

2 个答案:

答案 0 :(得分:0)

这意味着在电子邮件发送过程中,通过SendPulse验证,发件人电子邮件地址的域无效。

这可能是由于您域的DNS中缺少配置引起的。您可能缺少SPF记录。

  

创建一个SPF记录,以便更多的电子邮件到达收件人的收件箱。接收邮件服务器将使用SPF记录来确认电子邮件是从您的域发送的。

您应将TXT记录添加到您域中的DNS设置中,作为described here并具有以下值:

v=spf1 include:mxsmtp.sendpulse.com +a +mx ~all

如果它不起作用,请确保允许您发送电子邮件,因为在您通过验证之前,您的帐户可能无法发送电子邮件。
联系SendPulse支持以了解详情。

答案 1 :(得分:0)

遇到相同问题后。我切换到此解决方案。使用npm包使用了sendPulse API。

下面是代码和链接

   var sendpulse = require("sendpulse-api");
/*
 * https://login.sendpulse.com/settings/#api
 */
var API_USER_ID = "USER_ID";
var API_SECRET = "USER_SECRET";
var TOKEN_STORAGE = "/tmp/";
 
sendpulse.init(API_USER_ID,API_SECRET,TOKEN_STORAGE,function() {
    sendpulse.listAddressBooks(console.log);
});
 var answerGetter = function(data) {
  console.log(data);
}

var email = {
  "html" : "<h1>Example text</h1>",
  "text" : "Example text",
  "subject" : "Example subject",
  "from" : {
    "name" : "Alex",
    "email" : "some@domain.com"
  },
  "to" : [
    {
      "name" : "Piter",
      "email" : "some@domain.net"
    },
  ],
  "bcc" : [
    {
      "name" : "John",
      "email" : "some@domain.info"
    },
  ]
};
sendpulse.smtpSendMail(answerGetter,email);

/*   */

For complete detail visit this site.