Домен Mailgun не найден: abc.com
Я пытаюсь настроить электронную почту на своем собственном веб-сайте. Скажем, доменное имя abc.com
.
Используемый сервер имен - это цифровой океан, и у меня также есть учетная запись gmail, связанная с тем же (скажем, с помощью [email protected]
).
При настройке с помощью mailgun я использовал mg.abc.com
(поскольку они сказали, что он также позволит мне отправлять сообщения по электронной почте с использованием корневого домена). Шаг проверки завершен, и я могу отправить электронное письмо с помощью [email protected]
.
Однако попытка использования корневого домена ([email protected]
) дает следующую ошибку:
AnymailRequestsAPIError: Sending a message to [email protected] from [email protected]
ESP API response 404:
{
"message": "Domain not found: abc.com"
}
Как решить эту проблему?
Ответы
Ответ 1
Обновление 8/22/16:
Обновлен параметр "Anymail", чтобы получить новый файл MAILGUN_SENDER_DOMAIN в settings.py. См. Версию .5+ docs.
-
Оригинальный ответ
Вы не опубликовали свой код для того, как вы отправляете свой адрес электронной почты, но вы, вероятно, пытаетесь отправить его с помощью простой функции send_mail():
from django.core.mail import send_mail
send_mail("Subject", "text body", "[email protected]",
["[email protected]"],)
Когда вы используете этот метод, Anymail вытаскивает домен из вашего адреса From и пытается использовать его с Mailgun. Поскольку ваш адрес From (abc.com) не включает субдомен mg., Mailgun запутан.
Вместо этого вам нужно отправить электронное письмо с помощью объекта EmailMultiAlternatives
и указать домен отправителя электронной почты следующим образом:
from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives("Subject", "text body",
"[email protected]", ["[email protected]"])
msg.esp_extra = {"sender_domain": "mg.abc.com"}
msg.send()
Не забудьте скобки в поле To, так как это должен быть кортеж или список, даже если вы отправляете его только одному получателю.
Для получения дополнительной информации см. Документы Anymail в esp_extra.
Ответ 2
Я получил ту же ошибку, когда скопировал пример curl
со страницы справки Mailgun.
Мой домен был установлен в регион ЕС, и мне пришлось установить домен api api.eu.mailgun.net
вместо api.mailgun.net
.
Boom! За работой! :)
Ответ 3
Я использую регион ЕС с Mailgun и столкнулся с этой проблемой самостоятельно. Моя реализация - приложение Node.js
с mailgun-js
NPM 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 <[email protected]>",
to: "[email protected]",
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()
можно найти здесь.
Думал, что поделюсь полным ответом для тех, кто все еще смущен. Кроме того, Служба поддержки Mailgun любезно предоставила следующую таблицу в качестве справочного руководства: ![enter image description here]()
Ответ 4
В течение нескольких дней боролись с правильными настройками DNS и, наконец, как сказал @wiktor, мне нужно было добавить "eu" в конечную точку API, чтобы она работала. Это также задокументировано здесь: https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions
Извините за ответ в качестве ответа, не хватает представителя, чтобы добавить комментарий :(
Ответ 5
IF
:
- Ваш домен является доменом ЕС И
- вы используете
django-anymail
как в ответе Роба выше
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 [email protected] from [email protected] <[email protected]>
Mailgun API response 404 (NOT FOUND):
{
"message": "Domain not found: mailgun.abc.eu"
}