Sende e-post i utviklingsmiljø

PHP / webutvikling – Send e-post uten SMTP

0 kommentar(er)

Når du utvikler en webapplikasjon, kan det noen ganger være nødvendig å simulere sending av e-post: validering av e-postadresser, varsler, passordgjenoppretting osv.

I et utviklingsmiljø er det ingen mening i å sende virkelige e-poster: det tar tid, blir ofte filtrert og kan raskt endre seg til spam (særskilt hvis du bruker testadresser eller en feilkonfigurert fiktiv SMTP).

Selv om det er nødvendig å konfigurere et virkelig SMTP-server for produksjon, bør vi holde det enkelt og effektivt lokalt.

Den tips jeg deler med deg i dag gjelder Symfony, mer nøyaktig versjon 6.4 som er nesten ut av livstiden nå, men fortsatt mye brukt. Komponenten Mailer er godt bygd, og den tilbyr flere løsninger som også kan anpases til andre rammer eller webprosjekter.

Her er derfor en kikk på de metoder jeg har prøvd, og spesielt de som har overbevist meg mest.

🧪 1. Metode 1 – null://null


Dette er en minimalistisk metode, perfekt for å bare sende noen få e-poster uten å blokkere prosjektet ditt.

I filen .env:

Text
MAILER_DSN=null://null

Med dette transportmetoden gjør mailerkomponenten i Symfony ingenting. Ingen sending, ingen logging, ingen spor. Det er helt stille: koden kjøres, men ingen e-post blir sendt eller synliggjort.

👉 Bra for å verifisere at fløyet fungerer, men fullstendig ubrukelig hvis du vil se innholdet av dine e-poster eller visualisere HTML-en.

Hvis du virkelig trenger å se noe, kan du lage en lytter som logger meldingene (for eksempel MessageLoggerListener), men vi snakker rett ut: det er usanse, det fungerer, men det er ikke elegant.

🌐 2. Metode 2 – Bruk av Mailtrap for lokalt utvikling


Mailtrap er en tjeneste designet til å kapse e-poster sendt under utvikling, slik at du kan vise dem uten å virkelig sende dem. Det er en ideell løsning for å teste sending av e-post uten risiko.

🔧 2.1. Konfigurasjon med Symfony


  • Registrer deg på Mailtrap
  • Opprett et konto og lager en inbox for prosjektet ditt.
  • Hent innloggingssinformasjon
  • Når inboxen er opprettet, henter du nødvendige informasjon: brukernavn, passord, host og port.
  • Oppdater filen .env
  • I din .env-fil, konfigurer DSN for Symfony Mailer som følger:
Text
MAILER_DSN=smtp://<utilisateur>:<motdepasse>@smtp.mailtrap.io:2525

Bytt ut "brukernavn" og "passord" med informasjonen fra Mailtrap.

✅ Fordeler

  • Visning av e-post: Tilknyt deg en webgransering for å se de sendte e-postene.
  • Sikkerhet: Ingen e-post blir virkelig sendt, noe som unngår feil i produksjon.
  • Enkel integrasjon: Kompatibel med Symfony og andre PHP-ramverk.

⚠️ Merknad

Selv om Mailtrap er en sterk løsning, er det viktig å huske at det er et eksternt tjeneste. Pass på at du ikke bruker den i produksjon for å unngå uvesentlige sending av reelle e-poster.

🪐 3. Metode 3 – MailHog, min andre favoritt


Det blir alvorlig!

MailHog er en fiktiv SMTP-server som henter alle dine e-poster og lar deg se dem i en veldig klar webgransering.

Dette er et utmerket middel til å simulere et produktionsmiljø uten risiko, mens du fortsatt jobber lokalt. Det gjør det mulig å teste sending av e-post uten å støte på virkelige innboksene.

Du bare starter MailHog, setter Symfony til å peke mot den, og alle e-postene blir interseptert og leselig i nettleseren din.

🐳 3.1. Alternativ 1 – Sette opp MailHog via Docker


Hvis du er kjent med Docker, er dette av langt den snellste, mest klare og portabelle måten. Her er kommandoen for å starte MailHog i en Docker-container:

Bash
docker run -d \
--name mailhog \
-p 1025:1025 \
-p 8025:8025 \
mailhog/mailhog

Dette eksponerer en SMTP-server på localhost:1025 og en webgransering for å se e-postene på localhost:8025 (http://localhost:8025).

I filen .env, skriver du bare:

Text
MAILER_DSN=smtp://localhost:1025

Det er det! Når du sender en e-post fra Symfony, vil den vises umiddelbart i MailHogs webgransering.

🔧 3.2. Alternativ 2 – uten Docker (Debian, Linux)


Hvis du ikke liker Docker eller foretrekker en native installasjon, kan du sette opp MailHog direkte på din maskin. MailHog er skrevet i Go, og installasjonen er derfor ultra-enkel.

Her er fremgangsmåten for å installere MailHog naturlig:

Bash
wget https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64
chmod +x MailHog_linux_amd64
sudo mv MailHog_linux_amd64 /usr/local/bin/mailhog

Hvis du allerede har go, kan det installeres med kommandoen:

Bash
# Installasjon av binærfilen
go install mailhog
# Vi endrer $PATH-variabelen for å nå binærfilen uten full sti
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc
# ou
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc

Deretter starter du MailHog med:

Bash
mailhog

Samme porte, samme grensesnitt. Samme resultat.

Personlig har jeg gjort det til en service og skrevet et artikkel om det:

Sette opp Mailhog på en Debian 12-server

📊 Og i Symfony?

Det er viktig å merke seg at, uansett situasjon, MailHog blir fanget av Web Profiler i Symfony. Du kan derfor sjekke dine e-poster direkte fra debuggranseringen i Symfony, i fane «Mails» i din profiler. Dette kan være ganske praktisk for en hurtig gjennomgang av de sendte e-postene under utvikling.

🧠 4. For kort; Ikke lest


Metode Virkelig sending? Se innhold? Ideal for
null://null ❌ ❌ Tom kall
MailTrap ✅ / ❌ ✅ (fil) Realistisk simulering
MailHog ❌ ✅ (web UI) Realistisk simulering

💬 5. Avslutning


Når du jobber med e-poster i utviklingsmiljøet, er det ingen grunn til å miste tid på virkelige SMTP.

MailHog gjør jobben mye enklere, lokalt, uten smerte, og spesielt uten risiko for å sende en e-post via produksjons-SMTP på grunn av et glemt innstilling.

Personlig bruker jeg alltid litt container MailHog som kjører på mine Symfony-prosjekt. Det er enkelt, effektivt og virkelig fornøyelig å bruke.


Avslutning

Når du jobber med e-poster i utviklingsmiljøet, er det ingen grunn til å miste tid på virkelige SMTP.

MailHog gjør jobben mye enklere, lokalt, uten smerte, og spesielt uten risiko for å sende en e-post via produksjons-SMTP på grunn av et glemt innstilling.


Avslutning

Når du jobber med e-poster i utviklingsmiljøet, er det ingen grunn til å miste tid på virkelige SMTP.

MailHog gjør jobben mye enklere, lokalt, uten smerte, og spesielt uten risiko for å sende en e-post via produksjons-SMTP på grunn av et glemt innstilling.

Du liker kanskje også:

Kommentarer

Ingen godkjente kommentarer ennå.

Logg inn med en kommentatorkonto for å publisere en kommentar. Logg inn.