// so behebst du es
Mailgun „401 Forbidden“: falscher API-Schlüssel oder EU/US-Region passt nicht
Mailgun meldet 401 Forbidden oder Unauthorized. Prüfe die Art des API-Schlüssels, den Benutzernamen „api“ und ob deine Domain den US- oder EU-Endpunkt nutzt.
Was das bedeutet
Deine App hat die Mailgun-API aufgerufen und HTTP 401 Unauthorized bekommen. Der Antworttext ist oft nur das Wort Forbidden, was verwirrend ist. Laut der API-Referenz von Mailgun bedeutet 401, dass der API-Schlüssel fehlt oder ungültig ist, während 403 bedeutet, dass der Schlüssel gültig ist, der Zugriff auf diese Ressource aber verweigert wird. In der Praxis kommt ein 401 fast immer von einem der folgenden Probleme.
Warum das passiert
- Region passt nicht. Jede Sendedomain wird in der US- oder in der EU-Region angelegt. Eine in der EU angelegte Domain muss über
https://api.eu.mailgun.net/angesprochen werden, eine US-Domain überhttps://api.mailgun.net/. Der falsche Endpunkt schlägt auch mit einem gültigen Schlüssel fehl. Viele Bibliotheken und Plugins nutzen standardmäßig den US-Endpunkt. - Falsche Art von Schlüssel. Mailgun hat mehrere Schlüssel: den privaten Mailgun API key (Kontoebene), domain sending keys (nur zum Senden, für eine Domain), den HTTP webhook signing key und den public verification key. Mit den letzten beiden kann man keine E-Mails senden.
- Ein Sending Key für eine andere Domain oder einen anderen Endpunkt. Ein Domain Sending Key funktioniert nur für
/messagesund/messages.mimeauf der Domain, für die er erstellt wurde. Ein Aufruf von/v3/domainsoder einer anderen Domain damit schlägt fehl. - Fehlerhafte Basic Auth. Der Benutzername muss genau
apilauten und das Passwort der Schlüssel sein. Mancher Code sendet den Schlüssel als Benutzernamen oder fügt Leerzeichen oder Anführungszeichen hinzu. Ältere Schlüssel beginnen mitkey-, und dieses Präfix gehört zum Schlüssel. - Gelöschter oder neu erzeugter Schlüssel. Schlüssel werden nur einmal angezeigt; vielleicht hat ein Teammitglied den Schlüssel rotiert, den du noch in
.envhast. - IP-Allowlist: Ist der API-Zugriff in den Sicherheitseinstellungen deines Kontos auf bestimmte IP-Adressen beschränkt, werden Aufrufe von einem neuen Server abgelehnt.
Ein 404 „Domain not found“ bedeutet meist, dass der Domainname in der URL falsch ist oder in der anderen Region existiert.
So prüfst du es
- Öffne im Mailgun-Panel Send, Domains: Die Liste zeigt die Region jeder Domain (US oder EU).
- Teste deinen Schlüssel mit
curlund dem Endpunkt dieser Region:
curl -s --user 'api:YOUR_API_KEY' \ https://api.eu.mailgun.net/v3/mg.yourdomain.com/messages \ -F from='Test <hello@mg.yourdomain.com>' \ -F to='you@example.com' \ -F subject='Mailgun test' \ -F text='Hello'
Kommt eine JSON-Antwort mit einer id und „Queued“ zurück, stimmen Schlüssel und Region, und das Problem liegt in der Konfiguration deiner App. Schlägt es fehl, probier den anderen Endpunkt: Funktioniert einer und der andere nicht, passt die Region nicht. Entferne .eu bei einer US-Domain.
So behebst du es
1. Stelle die Region in deiner Bibliothek ein. Beispiele:
// mailgun.js (Node)
const mg = new Mailgun(FormData).client({
username: 'api',
key: process.env.MAILGUN_API_KEY,
url: 'https://api.eu.mailgun.net', // only for EU domains
});
# Laravel .env
MAILGUN_DOMAIN=mg.yourdomain.com
MAILGUN_SECRET=your-private-or-sending-key
MAILGUN_ENDPOINT=api.eu.mailgun.net
# Symfony Mailer
MAILER_DSN=mailgun+api://KEY:mg.yourdomain.com@default?region=euWähle in WordPress-SMTP-Plugins die passende Option Region. Dann:
- Nutze den richtigen Schlüssel. Erstelle im Mailgun-Panel (API security / sending keys) einen neuen privaten API-Schlüssel oder einen Domain Sending Key und speichere ihn sofort; du wirst ihn nicht noch einmal sehen. Nutze den Sending Key nur zum Senden auf seiner eigenen Domain.
- Achte auf versteckte Zeichen: keine Anführungszeichen im Wert, kein Leerzeichen und kein Zeilenumbruch am Ende durch Kopieren und Einfügen.
- Aktualisiere die IP-Allowlist, falls du eine nutzt, mit der öffentlichen IP des Servers, der die API aufruft.
- Bei SMTP ist der entsprechende Fehler ein
535-Authentifizierungsfehler. SMTP-Zugangsdaten gelten pro Domain und pro Region: Nutzesmtp.eu.mailgun.orgfür EU-Domains undsmtp.mailgun.orgfür US-Domains, mit dem SMTP-Login der Domain (zum Beispielpostmaster@mg.yourdomain.com). Nutzt du PHPMailer, siehe PHPMailer „Could not authenticate“.
Wird der Aufruf angenommen, die Nachricht aber abgelehnt, weil du noch die Sandbox-Domain nutzt, lies Mailgun-Sandbox: nur autorisierte Empfänger. Ist deine Domain noch nicht verifiziert, korrigiere zuerst ihr DNS mit Mailgun-Domain nicht verifiziert.
Prüfe, ob es behoben ist
Sende aus deiner App eine Nachricht an die einmalige Adresse auf der Startseite von Delivmail. Kommt sie an, funktioniert die Authentifizierung; der Bericht zeigt dir dann, ob SPF, DKIM und DMARC für deine Mailgun-Domain bestehen. Sende danach die mit 401 fehlgeschlagenen Nachrichten erneut und halte Region und Schlüssel an einer einzigen Stelle der Konfiguration, damit das nächste Deployment den Fehler nicht zurückbringt.
Prüfe, ob es behoben ist
DNS-Änderungen können ein paar Minuten bis einige Stunden dauern. Sende danach eine neue Test-E-Mail oder scanne deine Domain erneut.
Ähnliche Anleitungen
- Amazon SES SMTP „535 Authentication Credentials Invalid“: so behebst du esAmazon SES lehnt deinen SMTP-Login mit 535 Authentication Credentials Invalid ab. Nutze echte SMTP-Zugangsdaten, die richtige Region und teste sie.
- Amazon SES „Throttling: Maximum sending rate exceeded“ (454): so behebst du esAmazon SES meldet „Maximum sending rate exceeded“ oder „Daily message quota exceeded“. Prüfe deine Kontingente, sende langsamer und beantrage mehr.
- Mailgun-Domain nicht verifiziert: SPF-, DKIM-, MX- und CNAME-Einträge korrigierenMailgun zeigt deine Domain als nicht verifiziert an oder verweigert den Versand. Lege die richtigen SPF- und DKIM-Einträge an, vermeide DNS-Fehler und verifiziere.
- Mailgun „Sandbox subdomains are for test purposes only“ (403): so behebst du esMailgun verweigert den Versand von deiner Sandbox-Domain an eine Adresse, die kein autorisierter Empfänger ist. Autorisiere Testadressen oder nutze deine Domain.
- Mailgun 605 „Not delivering to previously bounced address“: so behebst du esMailgun verweigert den Versand mit Code 605, weil die Adresse früher gebounct ist. Erfahre, wann du sie von der Bounce-Liste entfernst und wann nicht.