【问题标题】:Mailgun Domain not found: abc.com未找到 Mailgun 域:abc.com
【发布时间】:2016-09-19 10:07:01
【问题描述】:

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

使用的域名服务器是数字海洋,我也有一个 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"
}

我该如何解决这个问题?

【问题讨论】:

    标签: digital-ocean mailgun


    【解决方案1】:

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

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

    轰隆隆!在职的! :)

    【讨论】:

    • 你绝对的传奇!无法在任何地方看到此文档。
    • 谢谢!你在哪里找到它的文档?
    • 谢谢!他们文档的 curl 示例还包括多个 to 字段。
    • 我欠你一品脱
    • 今天也遇到了同样的情况。快一年过去了,他们仍然没有更新示例生成器。
    【解决方案2】:

    我在欧盟地区使用 Mailgun,我自己也遇到了这个问题。我的实现是一个带有mailgun-js NPM packageNode.js 应用程序。

    欧盟地区实施:

    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);
        }
    });
    

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

    我想我会为仍然感到困惑的任何人分享一个完整的答案。此外,Mailgun Support 提供了下表作为参考指南:

    【讨论】:

    • 谢谢你。我正在拔头发,试图弄清楚为什么这不起作用。添加 host 属性为我修复了它。
    • 感谢您花了几天的时间寻找答案
    • Mailglum 正在将他们的技术支持外包给大众:“对于技术问题,我们建议在 Stack Overflow 上向社区提问。”
    • 绝对的传说,花了大约一个小时才找到这个,但在一行代码中解决了所有 hy 问题(欧盟域需要配置中的主机属性这一事实并不明显!)
    • 谢谢!同样的经历:没有意识到 host 属性默认为美国域,所以我得到“未找到域”,直到我将它与欧盟 mailgun 主机一起添加。
    【解决方案3】:

    IF:

    • 您的域是欧盟域并且
    • 您正在使用 django-anymail,就像上面 Rob 的 answer 一样

    THEN ANYMAIL 设置(在您的 Django 项目设置中)应将 API_URL 指定为欧盟之一,例如:

    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"
    }
    

    【讨论】:

      【解决方案4】:

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

      -- 原答案 您没有发布有关如何发送电子邮件的代码,但您可能正在尝试使用简单的 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()
      

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

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

      【讨论】:

      • 请注意,AnyMail 中添加了一项新设置,使这更加简单明了。请参阅this issue 中的 cmets。
      【解决方案5】:

      在正确的 DNS 设置上苦苦挣扎了好几天,最后发现正如@wiktor 所说,我需要将“eu”添加到 api 端点以使其工作。它实际上也记录在这里:https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions

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

      【讨论】:

        【解决方案6】:

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

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

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

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-30
            • 2015-10-10
            • 1970-01-01
            • 2016-07-23
            • 2020-05-26
            • 1970-01-01
            • 1970-01-01
            • 2018-05-08
            相关资源
            最近更新 更多