Systeem-mailbox configureren en koppelen
Aan het einde van deze gids verstuurt de monitor-systeem-mailbox (monitor) productie-mails via Microsoft Graph vanuit één centraal adres, en heb je de werking met een testmail bevestigd.
Voorwaarden:
- Je hebt admin-rechten op de Tapster-admin-omgeving.
- De Azure-mailbox bestaat en je kent het adres, het Azure-tenant-id en de gewenste display name.
- Je kunt admin-consent geven op de Azure app-registratie (
AZURE_CLIENT_ID), of laat dit doen door een collega met die rechten. - De backend staat op een versie waarin systeem-mailboxen aanwezig zijn.
Voor achtergrond, zie de explanation. Voor velden en endpoints, zie de reference.
1. Seed-record aanmaken (alleen eerste keer per omgeving)
Vanuit de repo-root, op de doelomgeving (of via je deploy-pipeline):
npm run seed:system-mailbox-monitor -w apps/api
Verwachte output:
[seed-system-mailbox-monitor] seed-record aangemaakt voor 'monitor'. Admin moet via UI configuratie en consent voltooien.
Of, als het record al bestond:
[seed-system-mailbox-monitor] bestaand record voor 'monitor', geen wijziging.
Het script is idempotent, herhaling is veilig.
2. Monitor-templates taggen (alleen eerste keer per omgeving)
npm run tag:monitor-templates -w apps/api
Dit zet systemMailboxKey: 'monitor' op alle bestaande monitor-campagne-templates (uitnodiging, 1e reminder, 2e reminder) over alle tenants. Templates met al een gezette key worden overgeslagen.
3. Configuratie invoeren via de admin-UI
- Open
/admin/systeem-mailboxen. Je ziet één rij:monitor. - Klik op de rij. Je komt op
/admin/systeem-mailboxen/monitor. - Vul in:
- Display name: de naam die respondenten in hun inbox zien (bijvoorbeeld
Monitor Cliëntmedezeggenschap). - Azure tenant id: de tenant-id van het Azure-account waar de mailbox staat.
- Mailbox-adres: het volledige e-mailadres, bijvoorbeeld
info@monitorclientmedezeggenschap.nl. - Bewaar in Verzonden: aanvinken als Microsoft Graph een kopie in de Verzonden-map moet plaatsen.
- Klik Opslaan. Je krijgt een snackbar “Opgeslagen”.
Op dit moment staat de status nog op “consent niet verleend” en gaat er nog niets uit.
4. Admin-consent geven
- Op dezelfde detailpagina, klik Koppel met Microsoft. Er opent een Microsoft-popup.
- Log in met een account dat admin-consent mag verlenen op de Azure app-registratie van Tapster.
- Bevestig de gevraagde permissies.
- Microsoft redirect naar
/system/mailboxes/azure/callback. De popup toont een succes-bericht. - De detailpagina polt elke 5 seconden (max 2 minuten) op de consent-status. Zodra die op
granted = truespringt, sluit de popup en zie je een snackbar “Mailbox gekoppeld”.
Lukt het niet binnen 2 minuten? Sluit de popup en klik nogmaals op Koppel met Microsoft. De polling-status reset.
5. Testmail versturen
- Vul onder “Stuur testmail” je eigen e-mailadres in.
- Klik Stuur testmail. De backend gebruikt de net gekoppelde mailer om een mail naar dat adres te sturen.
- Bij succes: snackbar “Testmail verstuurd”. Check je inbox, controleer afzender en display name.
- Bij fout: snackbar toont de foutboodschap, en de detailpagina herlaadt zodat
lastErrorAt/Messagezichtbaar wordt.
6. Productie-monitor-mails verifiëren
Vanaf nu pakt de BullMQ-worker send-scheduled-messages automatisch de tag op:
- Nieuwe Messages aangemaakt vanuit getagde templates erven
systemMailboxKey: 'monitor'. MailProviderService.sendrouteert ze naar de systeem-mailbox.
Wil je verifiëren? Trigger een monitor-uitnodiging via de normale UI of dispatch handmatig, en controleer in MongoDB op de tenant dat de gegenereerde Message het veld systemMailboxKey: 'monitor' heeft. De afzender van de uitgaande mail is dan het systeem-adres.
Wat te doen bij fouten
| Symptoom | Oorzaak | Actie |
|---|---|---|
| Snackbar “Testmail verstuurd”, maar geen mail in inbox | Spam-filter, of Graph wel geaccepteerd, levering vertraagd | Wacht enkele minuten, check spam, controleer in Azure Mail Flow |
| Snackbar “Mislukt: … 401 …” of “… 403 …” | Consent ingetrokken Azure-side | Status springt automatisch naar granted = false. Klik opnieuw Koppel met Microsoft |
| Snackbar “Mislukt: … is not configured” | Veld leeg of seed niet gedraaid | Controleer formuliervelden, draai stap 1 als het record ontbreekt |
Banner toont lastErrorAt na productie-mails |
Transient Graph-fout (rate limit, 5xx) | Bekijk lastErrorMessage, BullMQ-retry pakt opnieuw op |
Monitor-mail blijft op status ERROR |
Systeem-mailbox niet bereikbaar, geen fallback ontworpen | Los de mailbox-fout op, retry de message via bestaande retry-flow |
Er is bewust geen automatische terugval op de tenant-mailbox. De afspraak is dat monitor-mails altijd vanuit één adres komen. Bij outage stapelen mails op tot de mailbox weer werkt.
Inrichten aliassen i.c.m. shared-mailboxen
Om aliassen te kunnen gebruiken is het noodzakelijk om de mailbox te koppelen aan een alias. Gebruik deze handleiding: https://michev.info/blog/post/4081/send-as-alias-for-a-shared-mailbox-in-exchange-online