找不到 Mailgun 域:abc.com

Mailgun Domain not found: abc.com

我正在尝试使用我自己的网站设置电子邮件。假设域名是 abc.com.

正在使用的名称服务器是 digital ocean,我也有一个与之关联的 gmail 帐户(比如使用 contact@abc.com)。

在使用 mailgun 进行设置时,我使用了 mg.abc.com(正如他们所说,它还可以让我使用根域发送电子邮件)。验证步骤已完成,我可以使用 contact@mg.abc.com.

发送电子邮件

但是,尝试使用根域 (contact@abc.com) 会出现以下错误:

AnymailRequestsAPIError: Sending a message to me@gmail.com from contact@abc.com
ESP API response 404:
{
"message": "Domain not found: abc.com"
}

如何解决这个问题?

2016 年 8 月 22 日更新: Anymail 已更新为在 settings.py 中采用新的 MAILGUN_SENDER_DOMAIN。请参阅版本 .5+ 文档。

-- 原答案 您没有 post 发送电子邮件的代码,但您可能正在尝试使用简单的 send_mail() 函数发送:

from django.core.mail import send_mail

send_mail("Subject", "text body", "contact@abc.com",
          ["to@example.com"],)

当您使用此方法时,Anymail 会从您的发件人地址中提取域并尝试将其与 Mailgun 一起使用。由于您的发件人地址 (abc.com) 不包含子域 mg.,Mailgun 很困惑。

相反,您需要使用 EmailMultiAlternatives 对象发送电子邮件并指定电子邮件发件人域,如下所示:

from django.core.mail import EmailMultiAlternatives

msg = EmailMultiAlternatives("Subject", "text body",
                             "contact@abc.com", ["to@example.com"])
msg.esp_extra = {"sender_domain": "mg.abc.com"}

msg.send()

不要忘记“收件人”字段中的括号,因为这需要是一个元组或列表,即使您只将它发送给一个收件人。

有关详细信息,请参阅 esp_extra 上的 Anymail 文档。

我从 Mailgun 帮助页面复制粘贴 curl 示例时遇到了同样的错误。

我的域设置为欧盟区域,我必须将 api 域设置为 api.eu.mailgun.net 而不是 api.mailgun.net

轰!在职的! :)

为正确的 DNS 设置苦苦挣扎了好几天,终于找到了 @wiktor 所说的,我需要将 "eu" 添加到 api 端点才能使其正常工作。它实际上也记录在这里:https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions

很抱歉回复为答案,没有足够的代表添加评论:(

我在欧盟地区使用 Mailgun,我自己 运行 遇到过这个问题。我的实现是一个 Node.js 应用程序 mailgun-js NPM package.

欧盟地区实施:

const mailgun = require("mailgun-js");
const API_KEY = "MY_API_KEY";   // Add your API key here
const DOMAIN = "my-domain.com"; // Add your domain here
const mg = mailgun({
    apiKey: API_KEY,
    domain: DOMAIN,
    host: "api.eu.mailgun.net"  // -> Add this line for EU region domains
});
const data = {
    from: "Support <support@my-domain.com>",
    to: "recipient@example.com",
    subject: "Hello",
    text: "Testing some Mailgun awesomness!"
};
mg.messages().send(data, function(error, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body);
    }
});

进一步options对于mailgun()构造函数可以是found here.

我想我会为仍然感到困惑的任何人分享一个完整的答案。此外,Mailgun 支持人员非常友好地提供了以下 table 作为参考指南:

IF:

  • 您的域是欧盟域并且
  • 您使用的 django-anymail 与上述 Rob 的 相同

THEN ANYMAIL 设置(在您的 Django 项目设置中)应指定 API_URL 为 EU,例如:

ANYMAIL = {
    'MAILGUN_API_KEY': '<MAILGUN_API_KEY>',
    'MAILGUN_SENDER_DOMAIN': 'abc.eu',
    'MAILGUN_API_URL': 'https://api.eu.mailgun.net/v3'  # this line saved me!
}

在添加 MAILGUN_API_URL 之前我遇到了这个错误:

AnymailRequestsAPIError: Sending a message to xxx@yyy.com from noreply@abc.eu <noreply@abc.eu>
Mailgun API response 404 (NOT FOUND):
{
  "message": "Domain not found: mailgun.abc.eu"
}

我遇到了同样的问题:404 错误,找不到域。

原因 Mailgun

域的欧盟区域选择

解决方法 将区域从欧盟改回默认的美国。

由于到目前为止我根本没有使用过该域,所以我只是将其删除,重新添加,然后更改了我的 TXT、MX 和 CNAME 记录(例如,mailgun.org 而不是 eu .mailgun.org) 在域注册商处(在我的例子中是 GoDaddy)。

我找到了解决此更改的办法:

ANYMAIL = {
   ...
   'MAILGUN_SENDER_DOMAIN': 'mydomain.com', # Using the sending domain in Mailgun
}