Waarom dit anders ligt dan andere e-mailservices
Bij een gewone hoster (TransIP, Antagonist, Hostnet) installeer je een SMTP-plugin, vult host/poort/gebruiker/wachtwoord in, klaar. Bij Microsoft 365 is het in 2026 een ander verhaal:
- Basic Auth voor SMTP is sinds januari 2023 niet meer standaard beschikbaar in nieuwe tenants. Bestaande tenants die het hadden, zijn in fasen ook overgezet.
- Multifactor-authenticatie is steeds vaker verplicht — een gewoon wachtwoord werkt niet meer als gebruikers MFA aan hebben.
- Modern Authentication (OAuth 2.0) is nu het standaard mechanisme — vergt een app-registratie in Entra ID (voorheen Azure AD).
- Conditional Access policies in zakelijke tenants kunnen extra eisen stellen aan SMTP-verbindingen.
Concreet: als je in 2026 een M365-mailbox koppelt aan WordPress, heb je in 80% van de gevallen Microsoft Graph API met OAuth nodig. Hieronder eerst de drie methoden, dan de praktische stappen voor de meest gebruikte: WP Mail SMTP met Microsoft Graph.
Drie methoden — kies de juiste voor jouw situatie
Methode 1: WP Mail SMTP met Microsoft Graph (aanbevolen)
Modern, OAuth-gebaseerd, geen wachtwoord in WordPress nodig. Vereist eenmalige app-registratie in Entra ID en admin-toestemming. Werkt voor 90% van de tenants.
Wanneer kiezen: standaard zakelijke M365-tenant met admin-toegang, gemiddeld volume (< 10.000 e-mails/dag).
Methode 2: SMTP Auth met App Password (legacy)
Werkt alleen als je tenant Basic Auth voor SMTP nog toelaat (oude tenants of expliciet opnieuw aangezet) én de gebruiker heeft een app-password ingesteld.
Wanneer kiezen: oudere tenants waar Basic Auth nog werkt en je wilt snel iets opzetten zonder app-registratie. Niet toekomstbestendig.
Methode 3: SMTP Relay via Connector (high-volume)
Voor sites die honderden tot duizenden e-mails per dag versturen. M365 staat directe SMTP-relay toe vanaf vaste IP-adressen via een Inbound Connector. Je server-IP wordt expliciet vertrouwd.
Wanneer kiezen: hoge volumes, vast server-IP, transactionele e-mail. Vereist Exchange-admin met connector-rechten.
De rest van dit artikel behandelt methode 1 (Microsoft Graph) als hoofdpad, met methode 2 en 3 in kortere vorm.
Voorbereiding — wat je nodig hebt
- Microsoft 365-account met admin-rechten op de tenant (Global Admin of App Administrator). Heb je dat niet, vraag het aan je IT-beheerder.
- WordPress-admin-toegang tot de site waarvoor je het koppelt.
- WP Mail SMTP plugin — gratis versie werkt voor de meeste use cases. De Pro-versie biedt Microsoft 365 als één van de officiële mailers maar de gratis versie ondersteunt het ook.
- Een mailbox of shared mailbox waarvan e-mails verstuurd mogen worden.
Stap 1 — App registreren in Entra ID
Open entra.microsoft.com en log in als admin. Navigeer naar Identity → Applications → App registrations.
- Klik op + New registration
- Naam: bijvoorbeeld
WordPress Mailer - jouwsite.nl - Supported account types: Accounts in this organizational directory only (Single tenant)
- Redirect URI: laat leeg of kies "Web" met
https://jouwsite.nl/wp-admin/(alleen relevant voor user-flow OAuth, niet voor server-flow) - Klik Register
Je komt op de overview-pagina. Noteer drie waarden — die heb je straks nodig:
Application (client) ID: abc12345-...-...-...
Directory (tenant) ID: xyz98765-...-...-...
Object ID: (niet nodig voor SMTP)
Stap 2 — API-permissies toevoegen
In je nieuwe app-registratie, links in het menu klik API permissions.
- Klik + Add a permission
- Kies Microsoft Graph
- Kies Application permissions (NIET delegated — server-side)
- Zoek en vink aan: Mail.Send
- Klik Add permissions
- Klik op Grant admin consent for [tenant naam] bovenaan en bevestig
Status moet daarna "Granted for [tenant]" tonen met een groen vinkje. Geen consent = geen e-mail.
Optioneel: beperken tot één mailbox (sterk aanbevolen)
Met Mail.Send kan deze app vanuit ELKE mailbox in de tenant versturen — gevaarlijk als de client secret lekt. Beperk dit:
- Open een PowerShell als admin met Exchange-rechten
- Maak een Application Access Policy aan die de app beperkt tot één specifieke mailbox:
New-ApplicationAccessPolicy `
-AppId "abc12345-...-...-..." `
-PolicyScopeGroupId "noreply@jouwdomein.nl" `
-AccessRight RestrictAccess `
-Description "Restrict WordPress mailer to noreply mailbox only"
Vanaf nu kan deze app alleen vanuit noreply@jouwdomein.nl versturen. Mocht het secret ooit lekken, is de schade beperkt.
Stap 3 — Client Secret aanmaken
Terug in je app-registratie, links: Certificates & secrets.
- Tab Client secrets → + New client secret
- Description: bijvoorbeeld "WordPress mailer secret"
- Expires: kies bewust — 24 maanden is praktisch, korter is veiliger maar vereist eerder verlengen
- Klik Add
Belangrijk: de Value van het secret is alleen NU zichtbaar, daarna wordt hij verborgen. Kopieer hem direct naar je wachtwoord-manager. Mis je dit moment, dan moet je een nieuw secret aanmaken.
Stap 4 — WP Mail SMTP installeren en configureren
In WordPress: Plugins → Nieuwe plugin → "WP Mail SMTP" zoeken → Installeren → Activeren.
Ga naar WP Mail SMTP → Settings:
- From Email: het mailadres dat als afzender wordt getoond, bv.
noreply@jouwdomein.nl. Moet exact overeenkomen met de mailbox waarvoor de app autorisatie heeft. - From Name: bv. "Jouwsite Notificaties"
- Vink aan: Force From Email en Force From Name (anders overschrijven plugins als WooCommerce de waarden)
- Bij Mailer: kies Microsoft 365 / Outlook (in gratis versie heet het soms gewoon "Outlook")
Vul daarna de drie waarden in die je hebt genoteerd:
Application (Client) ID: <de waarde uit stap 1>
Application Client Secret: <de Value uit stap 3, NIET de Secret ID>
Tenant ID: <Directory ID uit stap 1>
Klik Save Settings.
Stap 5 — Test sturen
WP Mail SMTP heeft een Email Test-tab. Vul daar je eigen e-mailadres in en klik Send Email.
- "Email sent successfully" + e-mail aangekomen → klaar.
- Foutmelding → ga naar de troubleshooting-sectie hieronder.
Doe daarna ook een echte WordPress-test: vraag een wachtwoord-reset aan vanaf je login-pagina. Dat triggert wp_mail() via de normale flow en bewijst dat de koppeling alle WordPress-e-mails dekt.
Methode 2 — SMTP Auth met App Password (legacy)
Werkt alleen als je tenant nog Basic Auth voor SMTP toelaat. Test dit eerst door te kijken bij Microsoft 365 admin → Settings → Org settings → Modern Authentication → SMTP AUTH. Staat daar "Authenticated SMTP" aan, dan mag het.
App-wachtwoord aanmaken (gebruiker met MFA)
Login op mysignins.microsoft.com/security-info met de mailbox-account. Klik + Add sign-in method → App password. Geef het een naam (bv. "WordPress mailer"), kopieer het 16-teken wachtwoord.
WP Mail SMTP configuratie
Bij Mailer kies Other SMTP. Vul in:
SMTP Host: smtp.office365.com
Encryption: TLS
SMTP Port: 587
Auto TLS: Aan
Authentication: Aan
SMTP Username: noreply@jouwdomein.nl
SMTP Password: <het 16-teken app-password>
Save → Email Test draaien.
Let op: Microsoft kan op elk moment besluiten om Basic Auth volledig uit te schakelen (waarschuwing meestal 6 maanden vooraf). Beschouw dit als tijdelijke oplossing.
Methode 3 — SMTP Relay via Inbound Connector (high-volume)
Niet voor de gemiddelde site, maar als je honderden mails per uur verstuurt (transactionele systemen, nieuwsbrieven via WP) — dan is dit de schaalbare optie.
Hoe het werkt
Je server (vast IP) verbindt direct naar jouwdomein-nl.mail.protection.outlook.com op port 25 zonder authenticatie. M365 vertrouwt verbindingen vanaf jouw IP via een Inbound Connector. SPF moet jouw server-IP toestaan.
Setup-overzicht
- Exchange admin center → Mail flow → Connectors → + Add a connector
- From: "Your organization's email server" / To: "Microsoft 365"
- Authenticate by: "By verifying that the IP address of the sending server matches one of the following IP addresses, which belong to your organization"
- Voer je server-IP in (CIDR mogelijk)
- SPF van jouw verzendende domein uitbreiden om dat IP toe te staan:
v=spf1 include:spf.protection.outlook.com ip4:1.2.3.4 ~all - WP Mail SMTP → Other SMTP → Host
jouwdomein-nl.mail.protection.outlook.com, Port 25, Encryption: TLS (StartTLS), Authentication: Uit
Pas op: deze methode vereist een vast publiek IP. Op shared hosting werkt het niet.
Troubleshooting — meest voorkomende fouten
"535 5.7.139 Authentication unsuccessful, basic authentication is disabled"
Methode 2 (SMTP Auth) werkt niet meer in jouw tenant. Twee opties:
- Stap over op methode 1 (Microsoft Graph) — aanbevolen.
- Re-enable SMTP AUTH per mailbox via PowerShell:
Hou er rekening mee dat dit binnenkort permanent wordt geblokkeerd.Set-CASMailbox -Identity noreply@jouwdomein.nl -SmtpClientAuthenticationDisabled $false
"AADSTS7000215: Invalid client secret provided"
Je hebt de Secret ID gekopieerd in plaats van de Value. Of het secret is verlopen. Maak een nieuwe aan en let op: kopieer de Value-kolom, niet de Secret ID. Check ook of de string compleet is — soms wordt de laatste tekens afgekapt bij plakken.
"AADSTS50034: The user account does not exist"
De From Email in WordPress komt niet overeen met een echte mailbox in de tenant. Verifieer in M365 admin dat noreply@jouwdomein.nl bestaat als gewone mailbox of shared mailbox.
"InsufficientPrivileges: Forbidden"
De app-permissie Mail.Send is toegevoegd maar admin consent is niet verleend. Ga terug naar Entra → app → API permissions → "Grant admin consent" klikken.
"This message was not delivered to anyone"
Vaak een SPF/DKIM-issue: het ontvangende systeem (Gmail bijvoorbeeld) accepteert de mail wel maar markeert hem als spam of weigert hem stilletjes. Check je SPF-record:
v=spf1 include:spf.protection.outlook.com ~all
En zet DKIM aan in M365: Microsoft Defender → Email & collaboration → Policies & rules → Threat policies → Email authentication settings → DKIM. Selecteer je domein, schakel "Sign messages for this domain" aan. Volledige uitleg in SPF, DKIM en DMARC instellen.
"Berichten komen wel aan maar in spam"
Reputatie-probleem van je From-adres of ontbrekend DMARC-record. Verifieer dat je zowel SPF, DKIM en DMARC correct hebt ingesteld voor het verzendende domein. Test met mail-tester.com — score van 9+/10 is target.
Best practices voor productie-sites
- Gebruik een aparte mailbox voor uitgaande site-mail, bijvoorbeeld
noreply@jouwdomein.nlofwebsite@jouwdomein.nl. Niet je persoonlijke mailbox — als die ooit gehackt wordt of verandert, blijft je site-mail werken. - Stel "Reply-To" in op een echt bewaakt adres in WordPress, zodat klanten die op je notificaties antwoorden niet in een zwart gat schrijven.
- Documenteer de Tenant ID, Client ID en Secret expiry-datum in een wachtwoord-manager. Secrets die verlopen geven plotseling geen mail meer — meestal merk je het pas als klanten klagen.
- Stel een kalender-herinnering 30 dagen vóór secret-expiry. Vernieuwen kost 5 minuten als je goed voorbereid bent, 4 uur als je in paniek bent.
- Beperk de app-permissie tot één mailbox (Application Access Policy hierboven). Defense-in-depth.
- Monitor de mail-status. WP Mail SMTP Pro heeft een logboek — zelfs in de gratis versie kun je via een add-on zien welke mails wel/niet uitgingen.
Wanneer is M365 NIET de juiste keuze voor WordPress-mail?
Microsoft 365 is geweldig voor kleine tot middelgrote sites met < 5.000 mails per dag. Maar er zijn scenario's waarin je beter een dedicated transactional service gebruikt:
- Hoge volumes (10.000+ per dag) → Postmark, Mailgun, Sendgrid, AWS SES
- Marketing-mailings (nieuwsbrieven) → Mailchimp, MailerLite, Campaign Monitor — niet door je M365-mailbox jagen, dat is tegen Microsoft's TOS én slecht voor reputatie.
- Hoog risico op blacklisting (forms die ingestuurd kunnen worden door spammers) → een gescheiden transactional service voorkomt dat je hele M365-tenant wordt geblacklist.
- Real-time delivery-tracking nodig (bouncebacks, opens, clicks) → transactional services hebben veel betere logging.
Backup-plan voor als M365 ooit uitvalt
WP Mail SMTP Pro heeft een feature "Backup connection" — als de primaire mailer faalt, schakelt hij automatisch over naar een tweede. Praktische combo:
- Primair: Microsoft 365 (jouw branded domein, perfect deliverability)
- Backup: een gratis SMTP-service zoals Brevo (300/dag gratis) — alleen als M365 down is
Klanten merken dan niet dat er een storing is.
Kort: wat te doen als de mails plotseling stoppen
- WordPress error_log openen — staan er
wp_mail()-fouten in? - WP Mail SMTP → Email Test → loopt hij op een specifieke fout?
- Check of de Client Secret is verlopen (entra.microsoft.com → app → Certificates & secrets).
- Check of admin-consent nog geldt (soms wordt die ingetrokken na een tenant-reorganisatie).
- Check of de mailbox
noreply@jouwdomein.nlnog bestaat en niet is gemigreerd of hernoemd. - Check Microsoft service health (status.office.com).
Diepere uitleg over wanneer WordPress-e-mails niet aankomen: WordPress e-mails komen niet aan — oplossen.