J'essaie de configurer des e-mails avec mon propre site Web. Disons que le nom de domaine est abc.com
.
Le serveur de noms utilisé est Digital Ocean et j'ai également un compte gmail lié au même (par exemple, en utilisant [email protected]
).
Lors de la configuration des choses avec mailgun, j'ai utilisé mg.abc.com
(comme ils l'ont dit, cela me permettrait également d'envoyer des courriels en utilisant le domaine racine). L'étape de vérification est terminée et je peux envoyer un e-mail à l'aide de [email protected]
.
Cependant, en essayant d'utiliser le domaine racine ([email protected]
) donne l'erreur suivante:
AnymailRequestsAPIError: Sending a message to [email protected] from [email protected]
ESP API response 404:
{
"message": "Domain not found: abc.com"
}
Comment résoudre ce problème?
Mise à jour le 22/08/16: Anymail a été mis à jour pour prendre un nouveau MAILGUN_SENDER_DOMAIN dans settings.py. Voir la version .5+ docs.
- Réponse originale Vous n'avez pas publié votre code pour la façon dont vous envoyez votre e-mail, mais vous essayez probablement d'envoyer en utilisant le simple send_mail () fonction:
from Django.core.mail import send_mail
send_mail("Subject", "text body", "[email protected]",
["[email protected]"],)
Lorsque vous utilisez cette méthode, Anymail extrait le domaine de votre adresse De et essaie de l'utiliser avec Mailgun. Étant donné que votre adresse de provenance (abc.com) n'inclut pas le sous-domaine mg., Mailgun est confus.
Au lieu de cela, vous devez envoyer l'e-mail à l'aide de l'objet EmailMultiAlternatives
et spécifier le domaine de l'expéditeur de l'e-mail comme suit:
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()
N'oubliez pas les crochets dans votre champ À, car il doit s'agir d'un tuple ou d'une liste même si vous ne l'envoyez qu'à un seul destinataire.
Pour plus d'informations, consultez la documentation d'Anymail sur esp_extra .
J'ai eu la même erreur lorsque j'ai copié-collé l'exemple curl
de la page d'aide de Mailgun.
Mon domaine a été défini sur la région UE et j'ai dû définir le domaine api sur api.eu.mailgun.net
au lieu de api.mailgun.net
.
Boom! Travail! :)
J'utilise la région de l'UE avec Mailgun et j'ai rencontré ce problème moi-même. Mon implémentation est une application Node.js
Avec le mailgun-js
package NPM .
Mise en œuvre de la région UE:
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);
}
});
De plus, options
pour le constructeur mailgun()
peut être trouvé ici .
Je pensais partager une réponse complète pour tous ceux qui sont encore confus. En outre, Mailgun Support a eu la gentillesse de fournir le tableau suivant comme guide de référence:
IF
:
Django-anymail
comme dans Rob's réponse ci-dessusTHEN
le paramètre ANYMAIL
(dans vos paramètres de projet Django) doit spécifier le API_URL
être celui de l'UE, par exemple:
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!
}
Avant d'ajouter le MAILGUN_API_URL
J'obtenais cette erreur:
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"
}
Lutté pendant des jours avec des paramètres DNS corrects et finalement trouvé comme @wiktor l'a dit, j'avais besoin d'ajouter "eu" au point de terminaison api pour le faire fonctionner. C'est également documenté ici: https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions
Désolé d'avoir répondu comme réponse, je n'ai pas assez de représentants pour ajouter un commentaire :(
J'ai trouvé ma solution avec ce changement:
ANYMAIL = {
...
'MAILGUN_SENDER_DOMAIN': 'mydomain.com', # Using the sending domain in Mailgun
}
J'ai eu le même problème: erreur 404, domaine introuvable.
La cause La sélection de la région UE pour le domaine sur Mailgun
La solution Changer la région de l'UE à la valeur par défaut des États-Unis.
Comme je n'avais pas du tout utilisé le domaine jusqu'à présent, je l'ai simplement supprimé, rajouté, puis changé mes enregistrements TXT, MX et CNAME (par exemple, mailgun.org au lieu de eu.mailgun.org) au registraire de domaine (qui était GoDaddy dans mon cas).