自分のウェブサイトでメールをセットアップしようとしています。ドメイン名がabc.com
であるとしましょう。
使用中のネームサーバーはDigital Oceanで、それにリンクされている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"
}
この問題を解決するにはどうすればよいですか?
更新8/22/16:Anymailは、settings.pyで新しいMAILGUN_SENDER_DOMAINを取得するように更新されました。バージョン.5+のドキュメントを参照してください。
-元の回答メールの送信方法のコードを投稿していませんが、おそらく単純な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フィールドの括弧は、1つの受信者にのみ送信する場合でもタプルまたはリストである必要があるため、忘れないでください。
詳細については、Anymailのドキュメント esp_extra を参照してください。
Mailgunヘルプページからcurl
の例をコピーして貼り付けたときにも同じエラーが発生しました。
私のドメインはEU地域に設定されており、APIドメインをapi.eu.mailgun.net
ではなくapi.mailgun.net
に設定する必要がありました。
ブーム!ワーキング! :)
私はMailgunでEU地域を使用しており、この問題に自分で遭遇しました。私の実装は_Node.js
_ NPMパッケージ を含む_mailgun-js
_アプリケーションです。
EU地域の実装:
_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);
}
});
_
さらにmailgun()
コンストラクターのoptions
は ここにあります 。
まだ混乱している人のために私は完全な答えを共有すると思いました。さらに、Mailgun Supportは、次の表をリファレンスガイドとして提供できるほど親切でした:
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"
}
正しいDNS設定で何日も苦労し、@ wiktorが言ったように最終的に見つかりました。それを機能させるには、APIエンドポイントに「eu」を追加する必要がありました。実際には、ここにも記載されています: https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions
回答として返信して申し訳ありません。コメントを追加するのに十分な担当者がいません:(
私はこの変更で私の修正を見つけました:
ANYMAIL = {
...
'MAILGUN_SENDER_DOMAIN': 'mydomain.com', # Using the sending domain in Mailgun
}
同じ問題がありました:404エラー、ドメインが見つかりません。
原因 MailgunのドメインのEU地域の選択
ソリューション地域をEUからデフォルトのUSに戻します。
ここまではドメインをまったく使用していなかったので、ドメインを削除して再度追加し、TXT、MX、およびCNAMEレコード(たとえば、eu.mailgun.orgではなくmailgun.org)を変更しました。ドメインレジストラー(私の場合はGoDaddy)。