我正在尝试使用自己的网站设置电子邮件。假设域名为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"
}
如何解决此问题?
答案 0 :(得分:17)
当我从Mailgun帮助页面复制粘贴curl
示例时,遇到了相同的错误。
我的域设置为欧盟区域,并且我不得不将api域设置为api.eu.mailgun.net
,而不是api.mailgun.net
。
轰!工作! :)
答案 1 :(得分:4)
更新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.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文档。
答案 2 :(得分:4)
我在Mailgun中使用欧盟地区,我自己也遇到了这个问题。我的实现是一个Node.js
NPM package的mailgun-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);
}
});
options
构造函数的另外mailgun()
可以是found here。
答案 3 :(得分:1)
在正确的DNS设置下苦苦挣扎了几天,最终如@wiktor所说,我需要在api端点上添加“ eu”以使其正常工作。它实际上也记录在这里:https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions
对不起,作为答复,没有足够的代表来添加评论:(
答案 4 :(得分:0)
IF
:
django-anymail
,就像上面Rob的answer一样 THEN
的{{1}}设置(在Django项目设置中)应将ANYMAIL
指定为欧盟标准,例如:
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
答案 5 :(得分:0)
我遇到了同样的问题:404错误,未找到域。
原因 Mailgun上域的欧盟区域选择
解决方案 将区域从欧盟更改回默认值美国。
由于到目前为止我还没有使用过该域,因此我只是删除了该域,将其重新添加,然后更改了我的TXT,MX和CNAME记录(例如,mailgun.org而不是eu.mailgun.org) )(在我的案例中为GoDaddy)。
答案 6 :(得分:0)
我通过此更改找到了解决方法:
ANYMAIL = {
...
'MAILGUN_SENDER_DOMAIN': 'mydomain.com', # Using the sending domain in Mailgun
}