Mailgun域名未找到:example.com

24

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

正在使用 Digital Ocean 的名称服务器,我也有一个与之关联的 Gmail 帐户(例如使用 contact@example.com)。

在使用 Mailgun 进行设置时,我使用了 mg.example.com(因为他们说这也可以让我使用根域名发送电子邮件)。验证步骤已完成,并且我可以使用 contact@mg.example.com 发送电子邮件。

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

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

我该如何解决这个问题?

7个回答

83

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

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

嘭!成功啦!:)


谢谢!他们文档中的curl示例还包括多个“to”字段。 - Stuck
对我来说,似乎是这样的,但现在教程显示的是 mxa.eu.mailgun.orgmxb.eu.mailgun.org. 而不是 api.mailgun.net,我想知道现在正确的行为是什么,你们的 API 域名是否已过时? - Dimitri Kopriwa

48
我正在使用Mailgun的欧盟区域,并且自己遇到了这个问题。我的实现是一个Node.js应用程序,使用mailgun-js NPM包。
欧盟区域实现:
const mailgun = require("mailgun-js");
const API_KEY = "MY_API_KEY";   // Add your API key here
const DOMAIN = "my-domain.example"; // 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.example>",
    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);
    }
});

mailgun() 构造函数的进一步 选项 可在此处找到。

我想分享一个完整的答案给那些仍然感到困惑的人。此外,Mailgun支持友好地提供以下表格作为参考指南:


2
谢谢您。我一直在拼命地想弄清楚为什么这不起作用,加上“host”属性后问题得到了解决。 - henk.io
绝对的传奇,花了大约一个小时才找到这个问题,但是一行代码就解决了所有的问题(欧盟域需要在配置中添加主机属性这一事实并不明显!) - Goddak
谢谢!我也有同样的经历:没有意识到host属性默认为美国域名,所以在添加欧洲Mailgun主机时,我一直收到“域名未找到”的错误提示。 - cloudworks
终于:主机密钥!! - 谢谢!阅读软件包文档总是个好主意。这会为我节省几个小时的时间! - Kossi D. T. S.

8

IF:

  • 您的域名是欧盟域名,并且
  • 您正在使用django-anymail,就像Rob在上面的答案中所述一样

THEN(那么)ANYMAIL设置(在Django项目设置中)应指定API_URL为欧盟网址,例如:

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

在添加了MAILGUN_API_URL之前,我遇到了这个错误:
AnymailRequestsAPIError: Sending a message to xxx@example.com from noreply@example.eu <noreply@example.eu>
Mailgun API response 404 (NOT FOUND):
{
  "message": "Domain not found: mailgun.example.eu"
}

5

更新 8/22/16: Anymail已更新,现在在settings.py中需要输入新的MAILGUN_SENDER_DOMAIN。请参阅版本.5+文档。

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

from django.core.mail import send_mail

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

当您使用此方法时,Anymail会从您的发件人地址中提取域,并尝试将其与Mailgun一起使用。由于您的发件人地址(abc.example)不包括子域名mg.,因此Mailgun会感到困惑。
相反,您需要使用EmailMultiAlternatives对象发送电子邮件,并指定电子邮件发件人域,如下所示:
from django.core.mail import EmailMultiAlternatives

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

msg.send()

在您的收件人字段中不要忘记括号,即使只发送给一个收件人,也需要将其设置为元组或列表。

有关更多信息,请参阅Anymail文档中有关esp_extra的内容。


请注意,AnyMail正在添加新的设置,使这更加直观。请参见此问题中的评论。 - Rob

2

0

我通过这个更改找到了解决方法:

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

0

我曾经遇到过同样的问题:404错误,域名未找到。

原因 Mailgun上的欧盟区域选择。

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

由于在此之前我根本没有使用过该域名,所以我只需将其删除,重新添加,然后在域名注册商(在我的情况下是GoDaddy)更改我的TXT、MX和CNAME记录(例如,将eu.mailgun.org更改为mailgun.org)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接