Het testen van e-mails in een lokale ontwikkelomgeving kan een hele uitdaging zijn. Het is vrij lastig om erachter te komen of de uitgaande e-mails van je website of webapp daadwerkelijk de inbox van de ontvanger bereiken. Maar gelukkig is er MailHog!

MailHog is een tool voor het testen van e-mails die het supereenvoudig maakt om een lokale e-mailserver te installeren en te configureren. MailHog zet in feite een neppe SMTP server op. Je kan je favoriete web-apps configureren om de SMTP server van MailHog te gebruiken voor het verzenden en ontvangen van e-mails.

Je kan bijvoorbeeld een lokale WordPress site configureren om MailHog te gebruiken voor het bezorgen van je e-mails. Dat is precies wat DevKinsta doet om zijn ingebouwde SMTP server aan te drijven voor het lokaal testen van e-mails.

In dit artikel leer je de ins en outs van MailHog, inclusief de installatie, configuratie, het lokaal testen van e-mails en nog veel meer!

Klaar voor de start? Af!

Kijk je liever de videoversie?

Wat is MailHog?

MailHog webinterface
MailHog webinterface

MailHog is een open source tool waarmee je e-mails kan testen en is voornamelijk gericht op developers. Met de tool kan je de verzend- en ontvangstmogelijkheden van je webapplicatie efficiënter testen.

MailHog is gebouwd met de programmeertaal Go en kan op meerdere besturingssystemen worden uitgevoerd, waaronder Windowx, Linux, FreeBSD en macOS. MailHog wordt onderhouden door Ian Kent en is vrijgegeven onder de MIT licentie. Je kan het dus zonder zorgen deployen voor persoonlijk en commercieel gebruik.

Waarom je MailHog nodig hebt

MailHog lost veel van de meest voorkomende problemen op die je kan tegenkomen bij het testen van e-mails.

Stel dat je een WordPress website ontwikkelt in een lokale ontwikkelomgeving. Als je een contactformulier of een andere uitgaande e-mail wil testen, kan dit een lastige taak zijn.

Meestal zorgt de standaard SMTP server van de webapplicatie voor deze taak. In een lokale ontwikkelomgeving werkt deze echter bijna nooit. Dit heeft meerdere oorzaken.

Je kan onze uitgebreide gids over gratis SMTP servers lezen om meer te weten over hoe een SMTP server werkt.

Zo werkt een SMTP server (bron: Wikimedia Commons)
Zo werkt een SMTP server (bron: Wikimedia Commons)

Allereerst moet je je besturingssysteem, webserver en web-app instellen om e-mails mogelijk te maken in een lokale omgeving. Vervolgens moet je ervoor zorgen dat de e-mails succesvol in de inbox van je ontvanger aankomen, wat uiteindelijk je uiteindelijk tijd (en ruimte in je inbox) bespaart.

En dan is er natuurlijk nog het probleem dat je echte e-mailadressen nodig hebt om te testen. Dit kan namelijk de geloofwaardigheid van je privé-e-mail schaden.

MailHog lost alle bovenstaande problemen op. Het zet een neppe SMTP server op waarmee je je webtoepassing kan instellen om e-mails te verzenden en te ontvangen. Het slaat zelfs de verzonden en ontvangen e-mails op een handige webinterface zodat je ze kan doorlezen, net als bij een echte e-mailinbox.

Ten slotte kan je met MailHog de e-mails ook ophalen met een API voor geautomatiseerd testen. Het is een krachtige functie. Hoe je de API gebruikt, is aan jou.

Features MailHog

MailHog is standaard uitgerust met heel veel functies. Dit zijn een aantal die het noemen waard zijn:

  • Lichtgewicht en portable: Je hoeft MailHog niet te installeren om het te gebruiken. Dit is een van de belangrijkste voordelen van MailHog. Doordat de software zo portable is, kan je het ook op bijna elk besturingssysteem of elke webserver laten draaien.
  • Ondersteuning Extended SMTP: MailHog ondersteunt niet alleen het opzetten van een neppe SMTP server, maar je kan het ook gebruiken om een ESMTP (Extended SMTP) server op te zetten. Ook ondersteunt het SMTP AUTH en PIPELINING.
  • API ondersteuning: Je kan MailHog’s ingebouwde HTTP API (of JSON API) gebruiken om e-mails op te halen, weer te geven en te verwijderen.
  • Failure tests: Je kan Jim, de “Chaos Monkey” van MailHog (ja, zo heet hij echt), uitnodigen om de aflevercapaciteiten van de e-mails van je web-app te testen. Hij doet zijn werk door willekeurig veelvoorkomende problemen met de levering van e-mails te veroorzaken, zoals geweigerde verbindingen/authenticaties en slechte verbindingen.
  • Realtime updates: MailHog gebruikt de EventSource webinterface om realtime updates te regelen.
  • Ontvangen en opslag van e-mails: De ontvangen e-mails kunnen worden opgeslagen in de berichtopslag in het geheugen en worden bewaard in een MongoDB database en een file-based opslagsysteem.
  • Downloaden bijlagen: MailHog ondersteunt het downloaden van individuele MIME onderdelen.
  • Webinterface: Je kan de webinterface van MailHog gebruiken om e-mails te zien als plain text, HTML of source. Ook ondersteunt het multipart MIME en encoded headers.
  • Authenticatie: MailHog ondersteunt HTTP basisauthenticatie voor zowel de webinterface als API.
  • Ontvangen e-mails vrijgeven: Je kan MailHog configureren om ontvangen e-mails vrij te geven aan echte SMTP servers voor bezorging.
Jim is de "Chaos Monkey" van MailHog
Jim is de “Chaos Monkey” van MailHog

Naast bovenstaande features, heeft Mail ook nog twee client library’s voor PHP en NodeJS omgevingen waarmee je eenvoudig met de MailHog API kan communiceren.

MailHog deployen op verschillende platforms

Zoals ik eerder al aangaf, hoeft MailHog niet te worden geïnstalleerd. Je moet het echter natuurlijk nog wel downloaden en opzetten in je lokale ontwikkelomgeving.

Laten we beginnen met het downloaden van MailHog. Daarna laten we je zien hoe je het op de verschillende platforms opzet. Er zijn veel manieren waarop je dit kan doen.

MailHog op Windows

Ga allereerst naar de MailHog release pagina op GitHub om de meest recente stabiele versie voor Windows te downloaden. Nadat je MailHog hebt gedownload, kan je gewoon uitvoeren, zonder dat je externe dependency’s nodig hebt.

MailHog GitHub releases pagina
MailHog GitHub releases pagina

Opmerking: Op het moment van schrijven is MailHog 1.0.1. de meest recente release. Je kan het downloaden voor Windows, Linux en Darwin (macOS) platforms. Als je een nicheplatform gebruikt, kan je ook de sourcecode downloaden en deze compileren voor jouw specifieke use-case.

Aangezien MailHog voor Windows een eenvoudig uitvoerbaar bestand is, kan je simpelweg het gedownloade .exe bestand uitvoeren. Als je beveiligingswaarschuwingen krijgt, zorg er dan voor dat je MailHog uitvoert op je localhost omgeving zonder firewall beperkingen.

Zo ziet MailHog eruit op Windows 10.

MailHog op Windows 10
MailHog op Windows 10

Je kan zien dat de SMTP server op poort 1025 staat en de HTTP server op poort 8025.

Nog niets bijzonders, maar het is wel een bevestiging dat MailHog op je systeem draait.

Nu kan je localhost:8025 of 127.0.0.1:8025 in je webbrowser bezoeken om de webinterface van MailHog te bekijken.

MailHog webinterface op Windows
MailHog webinterface op Windows

Je kan nog geen e-mails vinden, omdat we nog geen enkele webapplicatie hebben geconfigureerd om MailHog te gebruiken. Dit zullen we verderop in dit artikel bespreken.

MailHog op Linux

Als je Linux gebruikt, kan je als volgt MailHog deployen:

sudo apt-get -y install golang-go
sudo apt-get install git
go install github.com/mailhog/MailHog

De eerste Linux opdracht installeert de Golang programmeertaal op je lokale ontwikkelomgeving (als je dat niet al hebt). Je kan deze regel overslaan als je Go al hebt. De volgende opdracht installeert git op je machine (ook deze kan je overslaan als je het al hebt).

De derde opdracht gebruikt Go’s directive om de meest recente stabiele release van MailHog te downloaden van de GitHub repository.

Volgens kan je /path/to/MailHog invoeren in je terminal om MailHog te starten. Het exacte pad hangt af van welk soort Linux je gebruikt. Omdat de bin bestanden van Go op Ubuntu worden opgeslagen onder de map ~/go/bin/, kan je de onderstaande code uitvoeren om MailHog te starten:

~/go/bin/MailHog

Dat was het. MailHog draait nu op je Linux machine. Zo ziet het eruit.

MailHog die op Linux (Ubuntu) draait
MailHog die op Linux (Ubuntu) draait

Als je MailHog automatisch wil opstarten wanneer je inlogt, kan je het instellen om te starten als een daemon serve met supervisord, upstart, etc. Je kan ook het init script of Ansible rol van geerlingguy gebruiken om hetzelfde te bewerkstellingen.

Net als bij Windows zie je hier dat de SMTP server op poort 1025 start en de HTTP server op poort 8025 start.

Bezoek localhost:8025 of 127.0.0.1:8025 in je webbrowser om de webinterface van MailHog te zien.

MailHog webinterface op Linux (Ubuntu)
MailHog webinterface op Linux (Ubuntu)

MailHog op macOS

Apple gebruikers kunnen MailHog installeren met Homebrew. Open je terminal en voer de volgende opdracht uit:

brew install mailhog

Hiermee installeer je MailHog op je macOS. Vervolgens kan je MailHog starten met:

mailhog

Als je wil dat MailHog automatisch start bij het inloggen en als achtergrondservice wordt uitgevoerd, kan je in plaats daarvan de volgende opdracht uitvoeren:

brew services start mailhog

Dat was het. MailHog is nu geïnstalleerd op je macOS. Je kan de webinterface bekijken door in je browser naar 127.0.0.1:8025 of localhost:8025 te gaan.

MailHog op Docker

Docker is een van de gemakkelijkste manieren om MailHog op elk platform in te stellen.

Zorg er eerst voor dat Docker op je computer is geïnstalleerd. Vervolgens kan je MailHog rechtstreeks vanuit Docker Hub starten door de volgende opdracht uit te voeren:

docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

Laten we eens beter kijken naar bovenstaande opdracht en de richtlijnen:

  • docker run start een docker container.
  • -d directive voert de docker container op de achtergrond uit.
  • -p 1025:1025 en -p 8025:8025 directives koppelen de MailHog’s standaard SMTP poorten aan je lokale.
  • mailhog/mailhog pakt de nieuwste MailHog build van Docker Hub.

Als alternatief kan je MailHog’s Maildir koppelen aan je lokale bestandssysteem (in plaats van binnen een Docker container) met de volgende opdracht:

docker run -d -e "MH_STORAGE=maildir" -v $PWD/maildir:/maildir -p 1025:1025 -p 8025:8025 mailhog/mailhog

Net als hiervoor kan je localhost:8025 of 127.0.0.1:8025 in je browser bezoeken om de webinterface van MailHog te gebruiken.

MailHog op Docker Compose

Docker Compose is een uitbreiding van Docker waarmee je eenvoudig met één opdracht meerdere Docker containers kan runnen. Je doet dit door alle containers die je wil runnen te definen in een YAML bestand.

Standaard vereist Docker Compose dat je dit bestand de naam docker-compose.yaml geeft.

Om MailHog te runnen met Docker Compose, zie je hieronder hoe je docker-compose.yaml bestand eruit moet zien:

version: "3"
services:
  mailhog:
    image: mailhog/mailhog:latest
    restart: always
    ports:
      - 1025:1025
      - 8025:8025

Voer in de map waarin dit bestand zich bevindt de volgende opdracht uit om MailHog op de achtergrond te starten:

docker-compose up -d mailhog

Het werkt precies zoals bij Docker. Behalve dat je hier niet veel directives hoeft te noemen, omdat je ze al hebt gedefinieerd.

Je kan nu localhost:8025 of 127.0.0.1:8025 in je browser invoeren om de webinterface van MailHog te zien.

Naast de bovenstaande methoden bevat de GitHub repo van MailHog ook een handleiding om MailHog te deployen op AWS Elastic Beanstalk.

MailHog configureren met mhsendmail

MailHog redirect e-mails van web-apps naar hun SMTP server met behulp van mhsendmail, een vervanging van sendmail die speciaal voor MailHog is gemaakt. Het zorgt ervoor dat de e-mails van je web-app worden verzonden en ontvangen met de SMTP server van localhost:1025, waarvan nu is ingesteld dat MailHog deze regelt.

Om aan de slag te gaan, moet je mhsendmail downloaden en installeren. Afhankelijk van je platform, kan je dit op verschillende manieren aanpakken.

Als je bijvoorbeeld Ubuntu gebruikt, kan je mhsendmail downloaden van de GitHub repository met behulp van de volgende opdracht:

wget https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64

Maak dit bestand vervolgens uitvoerbaar en verplaats het naar je gebruikersdirectory. Dit doe je met de volgende opdracht:

sudo chmod +x mhsendmail_linux_amd64
sudo mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail

Als alternatief kan je mhsendmail op Golang of Homebrew krijgen door deze opdracht uit te voeren:

go install github.com/mailhog/mhsendmail

Zorg ervoor dat Go is geïnstalleerd voordat je de bovenstaande opdracht uitvoert. Als je Linux gebruikt, raadpleeg dan de MailHog op Linux sectie hierboven. Voer de volgende opdracht uit om Go met Homebrew te installeren:

brew install go

Nu je mhsendmail hebt gedownload, kan je verder gaan met de installatie ervan:

go install github.com/mailhog/mhsendmail

Vervolgens moet je je web-app configureren om MailHog’s mhsendmail te gebruiken als e-mailroutingservice. De meeste Linux systemen hebben het standaard ingesteld om sendmail te gebruiken.

Je kan dit doen door je php.ini bestand te bewerken. Op de meeste servers vind je het php.ini bestand in de hoofdmap. Je kan ook de volgende opdracht uitvoeren om te zien waar deze zich bevindt:

php -i | grep 'php.ini'

Voor Linux machines die op Linux draaien, moet je de waarde van sendmail_path zetten op:

sendmail_path = /usr/local/bin/mhsendmail

In plaats van de bovenstaande waarde kan je ook de onderstaande waarde gebruiken om hetzelfde resultaat te krijgen:

sendmail_path = /usr/sbin/sendmail -S mail:1025

Als je Go hebt gebruikt om mhsendmail te installeren, of als je een andere variant van Linux gebruikt, kan het pad enigszins afwijken, afhankelijk van je platform/configuratie. Zorg dat je linkt naar de juiste mhsendmail directory.

Mac gebruikers moeten hun Postfix config file bewerken om MailHog goed in te stellen. Je kan de volgende Postfix configuatie gebruiken:

myhostname = localhost
relayhost = [127.0.0.1]:1025

Voor WordPress sites kan je de gratis MailHog for WordPress plugin te gebruiken om de e-mails van je site naar MailHog te routen. Om het te gebruiken moet je de plugin installeren en activeren in je WordPress beheerdersdashboard. Een beter alternatief is om DevKinsta te gebruiken. We zullen dit later uitgebreid behandelen.

Lees de MailHog documentatie voor informatie over hoe je het op verschillende andere platforms/configuraties kan instellen.

Overige MailHog configuratie-opties

Je kan MailHog configureren met behulp van de verschillende environment variable of command line opties.

Je kan bijvoorbeeld de standaard hostnaam wijzigen van mailhog.example naar een custom naam door gebruik te maken van de MH_HOSTNAME environment variable of de -hostname command line optie.

Voor meer informatie kan je de documentatie van MailHog configuratie-opties raadplegen.

E-mails lokaal testen met MailHog

Laten we tot slot onze MailHog setup testen om te kijken of deze goed is geconfigureerd.

Je kan een e-mail verzenden met de CLI van MailHog door de volgende mhsendmail directives:

mhsendmail [email protected] <<EOF
From: Salman <[email protected]>
To: Test <[email protected]>
Subject: Hello, MailHog!

Hey there,
Missing you pig time.

Hogs & Kisses,
Salman
EOF

In de bovenstaande code zet de <<EOF directive een custom delimeter zodat je de gegevens van de teste-mail interactief binnen de terminal kan invoeren. Deze voert alle input uit wanneer je de delimiter opnieuw typt. In dit geval verzendt het een e-mail met de opdracht mhsendmail.

Een teste-mail sturen met 'mhsendmail'
Een teste-mail sturen met ‘mhsendmail’

Je kan controleren of de e-mail met succes is afgeleverd door naar de MailHog webinterface te gaan.

De teste-mail is succesvol afgeleverd
De teste-mail is succesvol afgeleverd

Je kan ook op de test e-mail zelf klikken om de inhoud ervan te verifiëren.

De inhoud van de teste-mail verifiëren
De inhoud van de teste-mail verifiëren

Dat was het! We kunnen nu concluderen dat MailHog met succes is geconfigureerd.

Naast de bovenstaande methode zijn er andere manieren waarop je een teste-mail kan verzenden. Op macOS kan je bijvoorbeeld een test e-mail verzenden door de volgende opdracht in je terminal uit te voeren:

date | mail -s "Hello, MailHog!" [email protected]

In Windows kan je een e-mail verzenden met PowerShell door de volgende code uit te voeren:

Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Hello, MailHog!" -SmtpServer "localhost" -Port 1025

Je kan ook een PHP script definen met alle e-maildata en PHP’s functie mail() gebruiken om een test e-mail te verzenden. Om dat te doen, define je het PHP script zoals hieronder en voer je het uit vanuit de terminal:

<?php
$to = "[email protected]";
$subject = "Hey, I’m Pi Hog Pi!";
$body = "Hello, MailHog!";
$headers = "From: [email protected]" . "\r\n";
mail($to,$subject,$body,$headers);
?>

Ook kan je de MailHog API gebruiken om te testen of een e-mail met succes is afgeleverd. Als je uitsluitend in een niet-GUI omgeving werkt (bijvoorbeeld Linux-terminal, Windows PowerShell), is de MailHog API superhandig om e-mails weer te geven, op te halen en te verwijderen.

DevKinsta en MailHog: lokaal e-mails testen zonder zorgen

Onze lokale WordPress ontwikkeltool, DevKinsta, gebruikt MailHog ter ondersteuning van de e-mailfuncties. Omdat de tool ook Docker gebruikt om individuele sites te containeriseren, heb je voor elke lokale site die je ontwikkelt een aparte MailHog inbox.

DevKinsta 'Email Inbox' wordt aangedreven door MailHog
DevKinsta ‘Email Inbox’ wordt aangedreven door MailHog

Net als de MailHog webinterface kun je DevKinsta’s lokale e-mailinbox gebruiken om e-mails te bekijken en te manipuleren (verwijderen, markeren als gelezen, bron bekijken).

Bekijk en manipuleer e-mails in DevKinsta
Bekijk en manipuleer e-mails in DevKinsta

Ook kan je de logs bekijken van DevKinsta’s MailHog door de volgende Docker opdracht uit te voeren:

docker logs -f devkinsta_mailhog

Ga naar het artikel over DevKinsta in de kennisbank voor meer informatie.

Samenvatting

MailHog maakt het testen van e-mails een fluitje van een cent. Het is een geweldige praktische oplossing om de e-mails van je website of web-app te testen. Bovendien is MailHog eenvoudig in te stellen op bijna alle populaire platforms en heeft het een gebruiksvriendelijke webinterface.

Net als MailHog is DevKinsta een geweldige manier om aan de slag te gaan met lokale WordPress ontwikkeling. Niet alleen maakt DevKinsta gebruik van MailHog voor het lokaal testen van e-mails, maar wordt ook geleverd met Adminer voor eenvoudig databasebeheer.

Met MailHog (en DevKinsta) aan jouw zijde, zul je zien dat het lokaal testen van e-mails nog nooit zo eenvoudig was.

Als je je ervaring of uitdagingen met het lokaal testen van e-mails wilt delen, kan je ons een bericht sturen in het reactiegedeelte hieronder.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.