E-mail (uitgaande mail)¶
Het portaal verstuurt mail (o.a. de autorisatieverzoek-mails: nieuw verzoek, goedgekeurd, afgewezen) via de Exim-MTA op de host, niet via een externe provider.
Portaal (Laravel) ──SMTP──▶ host-Exim (host.docker.internal:25) ──▶ internet ──▶ ontvanger
afzender: portaal@mc-dienstverlening.cloud
Bezorgbaarheid (Gmail e.d. accepteren de mail) hangt af van DNS-records op
mc-dienstverlening.cloud; zie onderaan.
Portaal-configuratie (.env)¶
MAIL_MAILER=smtp
MAIL_HOST=host.docker.internal # de host (Exim); zie extra_hosts in compose
MAIL_PORT=25
MAIL_USERNAME= # lokale Exim, geen auth
MAIL_PASSWORD=
MAIL_AUTO_TLS=false # Exim biedt STARTTLS met niet-matchend cert
MAIL_FROM_ADDRESS=portaal@mc-dienstverlening.cloud # moet matchen met SPF/DKIM
MAIL_FROM_NAME="ZGD Portal"
In docker-compose.yml staat op de portal-service:
MAIL_MAILER=logbetekent dat mail niet wordt verstuurd maar alleen in het Laravel-log belandt (handig voor lokaal/testen). In deEmailLog-tabel zie je dat aan de kolommailer(logvssmtp).
Host-Exim: docker-subnet als relay-bron (vereist)¶
De container draait niet met --network host, dus de SMTP-verbinding komt
binnen vanaf het docker-subnet (172.16.0.0/12) i.p.v. 127.0.0.1. Exim moet dat
subnet vertrouwen, anders weigert hij met 550 relay not permitted.
In /etc/exim4/exim4.conf.template én de live /var/lib/exim4/config.autogenerated:
Daarna: systemctl restart exim4. (Dit is hostconfiguratie, geen onderdeel
van deze repo. Bij een herinstallatie van de host/Exim opnieuw zetten.)
DNS-records (op mc-dienstverlening.cloud)¶
Zonder deze records weigert Gmail met 550-5.7.26 ... unauthenticated:
| Record | Naam | Waarde (kern) |
|---|---|---|
| SPF | @ (TXT) |
v=spf1 ip4:72.62.60.239 ~all |
| DKIM | mail._domainkey (TXT) |
v=DKIM1; k=rsa; p=… (publieke sleutel) |
| DMARC | _dmarc (TXT) |
v=DMARC1; p=none; rua=mailto:mjh.cremer@gmail.com |
Verzending + worker¶
De autorisatieverzoek-mails worden afgehandeld door de worker
operaton:mail-worker (supervisord-programma in het portaal-image; pollt de
Operaton external-tasks notify-admin / notify-approved / notify-rejected).
Elke verzending wordt gelogd in de email_logs-tabel.
Problemen oplossen¶
- Niets ontvangen? Kijk in
email_logs: staat ermailer = log, dan is de mailer nog oploggezet (niet echt verzonden). - Relay geweigerd?
550 relay not permitted→ docker-subnet ontbreekt inrelay_from_hosts(zie boven). - Gmail weigert (
550-5.7.26)? SPF/DKIM/DMARC-records ontbreken of kloppen niet, ofMAIL_FROM_ADDRESSstaat niet op@mc-dienstverlening.cloud. - Exim-logboek:
/var/log/exim4/mainlog(zoek op het ontvangeradres). Wachtrij:exim4 -bpc(aantal) /exim4 -bp(lijst).