【问题标题】:How to successfully send mail using a different domain than SMTP credentials?如何使用与 SMTP 凭据不同的域成功发送邮件?
【发布时间】:2020-03-16 09:28:45
【问题描述】:

我想在使用 domain1.com SMTP 凭据连接到 domain1.com 时以 myemail@domain2.com 的形式发送电子邮件。 domain1.com 和 domain2.com 都有 SPF 记录。

我做了很多研究,发现您应该能够通过将“a:domain1.com”添加到 domain2.com 的 SPF 记录中来实现这一点。我已经这样做了,但我仍然无法成功发送电子邮件。

我使用 node.js 和 nodemailer 创建了一个测试代码来测试发送电子邮件。

const nodemailer = require('nodemailer');

let transport = nodemailer.createTransport({
  host: 'mail.domain1.com',
  port: 465,
  auth: {
    user: 'myemail@domain1.com',
    pass: 'password'
  }
});

const message = {
  from: 'myemail@domain2.com',
  to: 'test@gmail.com',
  subject: 'Testing 123',
  text: 'Testing One Two Three....'
};

transport.sendMail(message, function (err, info) {
  if (err) {
    console.log('err: ', err);
  } else {
    console.log('info: ', info);
  }
});
{ Error: Message failed: 550 Error458 block
at SMTPConnection._formatError (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
at SMTPConnection._actionSMTPStream (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:1661:34)
at SMTPConnection._responseActions.push.str (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:1146:22)
at SMTPConnection._processResponse (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:942:20)
at SMTPConnection._onData (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
at TLSSocket.SMTPConnection._onSocketData.chunk (C:\Users\Admin\Desktop\testsendmail\node_modules\nodemailer\lib\smtp-connection\index.js:195:44)
at TLSSocket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at TLSSocket.Readable.push (_stream_readable.js:219:10) 
code: 'EMESSAGE',
response: '550 Error458 block',
responseCode: 550,
command: 'DATA' }

以下是 2 个域的 SPF 记录:

domain1.com:

v=spf1 mx a ~all

domain2.com:

v=spf1 a a:domain1.com mx ?all

【问题讨论】:

    标签: javascript node.js smtp nodemailer spf


    【解决方案1】:

    添加第二个域作为邮件源的正确方法是使用include 机制:

    v=spf1 a mx include:domain2.com ~all
    

    我无法从您发布的内容中判断这是否真的是您遇到错误的原因。

    您可能还想研究 DKIM 签名和 DMARC。

    虽然我在这里,但拥有?all 默认机制是没有意义的;相当于根本没有 SPF 记录;如果您使用的是 DMARC,请使用 ~all,否则使用 -all(但请确保在此之前所有您的邮件来源都已确定)。

    【讨论】:

    • 是否在我的 domain1.com 或 domain2.com 的 spf 记录中添加 include 语句?
    • 属于 domain1.com。检查 domain2 的记录中的内容,以确保它也设置正确。
    • 我发现我的 domain1.com 和 domain2.com 都没有 DKIM,没有 DKIM 会不会导致这个问题?
    • DKIM 的设置比 SPF 复杂得多,并且与地址无关,但也会输入 DMARC。这一切都有帮助,因此最好的方法是实现所有这些,尽管这需要大量工作。
    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2014-01-23
    • 2010-11-22
    • 1970-01-01
    • 2016-11-22
    • 2011-03-04
    • 1970-01-01
    • 2016-07-06
    相关资源
    最近更新 更多