Testare le email in un ambiente di sviluppo locale può essere impegnativo. È una vera sofferenza rimanere con il dubbio che le email in uscita del vostro sito web o della vostra web app stiano effettivamente raggiungendo le caselle di posta dei destinatari. Ma per questo c’è MailHog!

MailHog è uno strumento per testare la posta elettronica che rende super facile installare e configurare un server di posta locale. MailHog imposta un falso server SMTP. Potete configurare le vostre applicazioni web preferite per usare il server SMTP di MailHog per inviare e ricevere email.

Per esempio, è possibile configurare un sito WordPress locale per usare MailHog per le consegne di email. Questo è esattamente ciò che fa DevKinsta per alimentare il suo server SMTP integrato e testare le email a livello locale.

In questo articolo, imparererete i pro e i contro di MailHog, compresa la sua installazione, la configurazione, come testare le email localmente e molto altro!

Iniziamo? Via!

Preferite la versione video?

Cos’È MailHog?

Interfaccia utente web di MailHog
Interfaccia utente web di MailHog

MailHog è uno strumento open source per testare le email rivolto principalmente a chi si occupa di sviluppo. Vi permette di testare le capacità di invio e ricezione di email della vostra applicazione web in modo più efficiente.

Costruito con il linguaggio di programmazione Go, MailHog può essere eseguito su diversi sistemi operativi, tra cui Windows, Linux, FreeBSD e macOS. MailHog è mantenuto da Ian Kent e rilasciato sotto la licenza MIT, quindi potete usarlo liberamente per usi personali e commerciali.

Ma perché avete bisogno di MailHog in primo luogo?

Perché Avete Bisogno di MailHog

MailHog risolve molti dei principali problemi di test delle email.

Diciamo che state sviluppando un sito web WordPress in un ambiente di sviluppo locale. Se volete testare un modulo di contatto o qualsiasi altra email in uscita da esso, le cose possono complicarsi.

Di solito, il server SMTP predefinito dell’applicazione web si occupa di questo compito. In un ambiente di sviluppo locale, quasi sempre non funziona a causa di molteplici ragioni.

Potete leggere la nostra guida completa sui server SMTP gratuiti per sapere di più su come funziona un server SMTP.

Come funziona un server SMTP (Fonte: Wikimedia Commons)
Come funziona un server SMTP (Fonte: Wikimedia Commons)

In primo luogo, è necessario impostare il sistema operativo, il server web e l’applicazione web per abilitare le email in un ambiente locale. Poi dovrete assicurarvi che le email arrivino con successo nella casella di posta del vostro destinatario, il che può finire per farvi perdere tempo (e spazio nella casella di posta).

E poi c’è il problema di usare un vero indirizzo email per i test. Può danneggiare la credibilità della vostra email privata.

MailHog risolve tutti i problemi di cui sopra. Imposta un falso server SMTP che potete impostare nella vostra applicazione web per inviare e ricevere email. Memorizza anche le email inviate e ricevute in un’elegante interfaccia web, in modo da poterle esaminare proprio come si farebbe con una vera casella di posta elettronica.

Infine, MailHog vi permette anche di recuperare queste email con un’API per i test automatici. È una caratteristica potente, e il modo in cui usare l’API dipende da voi.

Caratteristiche di MailHog

MailHog è dotato di molte caratteristiche out-of-the-box. Ecco alcune delle sue principali caratteristiche:

  • Leggero e portatile: Non è necessario installare MailHog per usarlo. È uno dei principali vantaggi di MailHog. Questo lo rende altamente portatile per eseguirlo su quasi tutti i sistemi operativi o server web.
  • Supporto SMTP esteso: Non solo MailHog supporta l’impostazione di un falso server SMTP, ma potete anche usarlo per impostare un server ESMTP (SMTP esteso). Include anche il supporto per SMTP AUTH e PIPELINING.
  • Supporto API: Potete usare l’API HTTP integrata di MailHog (o l’API JSON) per recuperare, elencare e cancellare le email.
  • Failure Testing: Potete invitare Jim, la Chaos Monkey di MailHog (sì, si chiama proprio così), a testare la deliverability della vostra app web. Lo fa creando casualmente problemi comuni di deliverability delle email, come connessioni/autenticazioni rifiutate e connessioni a velocità limitata.
  • Aggiornamenti in tempo reale: MailHog utilizza l’interfaccia web EventSource per fornire aggiornamenti istantanei.
  • Cattura e memorizzazione delle email: Le email catturate possono essere immagazzinate in un archivio di messaggi in memoria e conservate in un database MongoDB e in un sistema di archiviazione basato su file.
  • Scaricare allegati: MailHog supporta il download di singole parti MIME.
  • Web UI: Potete usare l’interfaccia web di MailHog per visualizzare le email come testo semplice, HTML o sorgente. Supporta anche il MIME multipart e le intestazioni codificate.
  • Autenticazione: MailHog supporta l’autenticazione di base HTTP sia per la sua Web UI che per l’API.
  • Rilasciare le email catturate: Potete configurare MailHog per rilasciare le email catturate ai server SMTP reali per la consegna.
Jim è la "scimmia del caos" di MailHog
Jim è la “Chaos Monkey” di MailHog

Oltre alle caratteristiche di cui sopra, MailHog ha attualmente due librerie client per gli ambienti PHP e NodeJS per interagire facilmente con l’API di MailHog.

Distribuzione di MailHog su Varie Piattaforme

Come detto prima, MailHog non ha bisogno di essere installato. Tuttavia, dovete comunque scaricarlo e impostarlo nel vostro ambiente di sviluppo.

Iniziamo con il download di MailHog. Poi vi mostreremo come impostarlo su varie piattaforme. Ci sono molti modi per farlo.

MailHog su Windows

Per prima cosa, andate alla pagina dei rilasci di MailHog su GitHub per scaricare la sua ultima versione stabile per Windows. Dopo aver scaricato MailHog, potete eseguirlo così com’è senza alcuna dipendenza esterna.

Pagina dei rilasci di MailHog su GitHub
Pagina dei rilasci di MailHog su GitHub

Nota: Al momento di scrivere questo articolo, MailHog 1.0.1 è l’ultima versione rilasciata. Potete scaricarlo precompilato per le piattaforme Windows, Linux e Darwin (macOS). Se state usando una piattaforma di nicchia, potete anche scaricare il suo codice sorgente e compilarlo per il vostro caso d’uso specifico.

Poiché MailHog per Windows è un semplice programma auto-eseguibile, potete semplicemente eseguire il file .exe scaricato. Se vi vengono presentati degli avvisi di sicurezza, permettete a MailHog l’esecuzione sul vostro ambiente localhost senza restrizioni di firewall.

Ecco come appare MailHog su Windows 10.

MailHog in esecuzione su Windows 10
MailHog in esecuzione su Windows 10

Potete vedere che il server SMTP funziona sulla porta 1025 e il server HTTP è sulla porta 8025.

Niente di troppo sofisticato ancora, ma è una conferma che MailHog è in esecuzione sul vostro sistema.

Ora, potete visitare localhost:8025 o 127.0.0.1:8025 nel vostro browser web per visualizzare la Web UI di MailHog.

MailHog Web UI su Windows
MailHog Web UI su Windows

Non potete trovare nessuna email elencata qui, perché non abbiamo configurato nessuna delle nostre applicazioni web per usare MailHog. Ne parleremo più avanti in questo articolo.

MailHog su Linux

Se state usando Linux (Ubuntu/Debian), ecco come potete lanciare MailHog:

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

Il primo comando installa il linguaggio di programmazione Golang sul vostro ambiente di sviluppo (se non lo avete già). Potete saltare questa riga se avete già installato Go. Il prossimo comando installa git sulla vostra macchina (potete saltare anche questo se è già installato).

Il terzo comando usa la direttiva di Go per ottenere l’ultima versione stabile di MailHog dal suo repository GitHub.

Poi, potete eseguire /path/to/MailHog attraverso il vostro terminale per avviare MailHog. Il percorso esatto può variare a seconda della vostra versione di Linux. Poiché i file bin di Go su Ubuntu sono memorizzati sotto la directory ~/go/bin/, potete eseguire il codice seguente per avviare MailHog:

~/go/bin/MailHog

Questo è più o meno tutto. MailHog è ora in esecuzione sulla vostra macchina Linux. Questo è il suo aspetto.

MailHog in esecuzione su Linux (Ubuntu)
MailHog in esecuzione su Linux (Ubuntu)

Se volete avviare MailHog automaticamente a ogni login, potete impostarlo per avviarlo come server daemon usando supervisord, upstart, ecc. Potete anche usare lo script init o l’Ansible role fornito da geerlingguy per fare lo stesso.

Proprio come con Windows, potete vedere che il server SMTP inizia sulla porta 1025 e il server HTTP sulla porta 8025.

Visitate localhost:8025 o 127.0.0.1:8025 nel vostro browser web per vedere la Web UI di MailHog.

MailHog Web UI su Linux (Ubuntu)
MailHog Web UI su Linux (Ubuntu)

MailHog su macOS

Gli utenti Apple possono installare MailHog usando Homebrew. Aprite il vostro terminale ed eseguite il seguente comando:

brew install mailhog

Questo installerà MailHog sul vostro macOS. Poi, potete avviare MailHog con:

mailhog

Se volete che MailHog si avvii automaticamente al login e venga eseguito come un servizio in background, potete invece eseguire il seguente comando:

brew services start mailhog

Questo è più o meno tutto. MailHog è ora installato sul vostro macOS. Potete vedere la sua interfaccia web visitando
127.0.0.1:8025 o localhost:8025 nel vostro browser.

MailHog su Docker

Docker è uno dei modi più semplici per impostare MailHog su qualsiasi piattaforma.

In primo luogo, assicuratevi di avere Docker installato sulla vostra macchina. Poi, potete avviare MailHog direttamente da Docker Hub eseguendo il seguente comando:

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

Analizziamo il comando di cui sopra e le sue direttive:

  • docker run avvia un contenitore docker.
  • -d esegue il contenitore docker in background.
  • Le direttive -p 1025:1025 e -p 8025:8025 espongono le porte SMTP predefinite di MailHog a quelle locali.
  • mailhog/mailhog prende l’ultima build di MailHog da Docker Hub.

In alternativa, se volete montare Maildir di MailHog sul vostro filesystem locale (invece che dentro un Docker), potete eseguire il seguente comando:

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

Come detto prima, visitate localhost:8025 o 127.0.0.1:8025 nel vostro browser per usare MailHog Web UI.

MailHog su Docker Compose

Docker Compose è un’estensione di Docker che rende facile eseguire più contenitori Docker con un solo comando. Lo si fa definendo tutti i contenitori che si desidera eseguire in un file YAML.

Per impostazione predefinita, Docker Compose richiede di nominare questo file come docker-compose.yaml.

Per eseguire MailHog con Docker Compose, ecco come dovrebbe essere il vostro file docker-compose.yaml:

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

All’interno della cartella dove risiede questo file, eseguite il seguente comando per avviare MailHog in background:

docker-compose up -d mailhog

Funziona esattamente come con Docker. Tranne che qui non c’è bisogno di menzionare molte direttive perché le avete già definite.

Ora potete inserire localhost:8025 o 127.0.0.1:8025 nel vostro browser per visualizzare MailHog Web UI.

Oltre ai metodi di cui sopra, il repo GitHub di MailHog include anche una guida per avviare MailHog su AWS Elastic Beanstalk.

Configurare MailHog con mhsendmail

MailHog reindirizza le email dalle applicazioni web al suo server SMTP utilizzando mhsendmail, un sostituto di sendmail creato appositamente per MailHog. Assicura che le email della vostra applicazione web siano inviate e ricevute usando il server SMTP localhost:1025, che MailHog è configurato per gestire in modo predefinito.

Per iniziare, è necessario scaricare e installare mhsendmail. A seconda della vostra piattaforma, potete approcciarvi in vari modi.

Per esempio, se state usando Ubuntu, potete scaricare mhsendmail dal suo repository GitHub usando il seguente comando:

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

Successivamente, rendete questo file eseguibile e spostatelo nella vostra directory utente. Per farlo, usate il seguente comando:

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

In alternativa, potete anche ottenere mhsendmail su Golang o Homebrew eseguendo questo comando:

go install github.com/mailhog/mhsendmail

Assicuratevi che Go sia installato prima di eseguire il comando di cui sopra. Se siete su Linux, fate riferimento alla sezione MailHog su Linux qui sopra. Per installare Go con Homebrew, eseguite il seguente comando:

brew install go

Con mhsendmail scaricato, potete ora procedere all’installazione:

go install github.com/mailhog/mhsendmail

Successivamente, dovete configurare la vostra applicazione web per usare mhsendmail di MailHog come servizio di routing delle email. La maggior parte dei sistemi Linux è impostata per usare sendmail in modo predefinito.

Potete farlo modificando il vostro file php.ini. Sulla maggior parte dei server, potete trovare il file php.ini nella directory principale.

Potete anche eseguire il seguente comando per trovarlo:

php -i | grep 'php.ini'

Per le macchine Linux con Ubuntu, è necessario impostare il valore di sendmail_path su:

sendmail_path = /usr/local/bin/mhsendmail

Invece del valore di cui sopra, potete anche usare il valore mostrato qui sotto per ottenere lo stesso risultato:

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

Se avete usato Go per installare mhsendmail, o se state usando qualsiasi altra variante di Linux, il percorso può variare leggermente a seconda della vostra piattaforma/configurazione. Assicuratevi di collegarvi alla corretta directory di mhsendmail.

Gli utenti Mac devono modificare il file di configurazione di Postfix per impostare correttamente MailHog. Potete usare la seguente configurazione di Postfix:

myhostname = localhost
relayhost = [127.0.0.1]:1025

Per i siti WordPress, potete usare il plugin gratuito MailHog for WordPress per indirizzare le email del vostro sito a MailHog. Per usarlo, installate e attivate il plugin nel vostro cruscotto di amministrazione di WordPress. Un’alternativa migliore è quella di usare DevKinsta. Lo vedremo approfonditamente più tardi.

Leggete la documentazione di MailHog per informazioni su come impostarlo su varie altre piattaforme/configurazioni.

Opzioni Aggiuntive di Configurazione di MailHog

Potete configurare MailHog usando le sue variabili d’ambiente o le opzioni della linea di comando.

Per esempio, potete cambiare il vostro hostname di default da mailhog.example a un nome personalizzato usando la variabile environment MH_HOSTNAME o l’opzione della linea di comando -hostname.

Per maggiori informazioni, potete controllare la documentazione sulle opzioni di configurazione di MailHog.

Test delle Email Locali con MailHog

Infine, testiamo la nostra configurazione di MailHog per vedere se è configurata correttamente.

Potete inviare un’email con la CLI di Mailhog usando le seguenti direttive mhsendmail:

mhsendmail [email protected] <
To: Test <[email protected]>
Subject: Ciao, MailHog!

Ciao,
Questa è una prova.

Baci e abbracci,
Salman
EOF

Nel codice qui sopra, la direttiva <<EOF imposta un delimitatore personalizzato che permette di inserire i dettagli dell’email di prova in modo interattivo all’interno del terminale. Quando si digita di nuovo il delimitatore, si esegue tutto l’input. Qui invia una mail usando il comando mhsendmail.

Inviare un'email di prova usando 'mhsendmail
Inviare un’email di prova usando ‘mhsendmail

Potete verificare se l’email è stata consegnata con successo visitando la Web UI di MailHog.

L'email di prova è stata consegnata con successo
L’email di prova è stata consegnata con successo

Potete anche fare clic sull’email di prova per verificarne il contenuto.

Verifica del contenuto del corpo dell'email di prova
Verifica del contenuto del corpo dell’email di prova

E questo è tutto! Possiamo ora concludere che MailHog è stato configurato con successo.

Oltre al metodo di cui sopra, ci sono altri modi per inviare un’email di prova. Per esempio, su macOS, potete inviare un’email di prova eseguendo il seguente comando nel terminale:

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

Su Windows, potete inviare un’email con PowerShell eseguendo il seguente codice:

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

Potete anche definire uno script PHP con tutti i dati di posta e usare la funzione mail() di PHP per inviare un’email di prova. Per farlo, definite il vostro script PHP come segue ed eseguitelo dal terminale:

<?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);
?>

Infine, potete usare MailHog API per verificare se un’email è stata consegnata con successo. Se state lavorando esclusivamente in un ambiente non-GUI (ad esempio terminale Linux, Windows PowerShell), l’API MailHog è super utile per elencare, recuperare e cancellare le email.

DevKinsta e MailHog: Testare Senza Problemi le Email Locali

Il nostro strumento di sviluppo locale di WordPress, DevKinsta, usa MailHog per alimentare le sue funzioni di test delle email. Come fa anche Docker per containerizzare i singoli siti, avrete una casella di posta separata MailHog per ogni sito locale che state sviluppando.

La 'casella di posta elettronica' di DevKinsta è alimentata da MailHog
La ‘casella di posta elettronica’ di DevKinsta è alimentata da MailHog

Come con MailHog Web UI, anche con DevKinsta potete usare la casella di posta locale per visualizzare e manipolare le email (cancellare, segnare come letto, visualizzare la fonte).

Visualizzare e manipolare le email in DevKinsta
Visualizzare e manipolare le email in DevKinsta

Potete anche controllare i log di MailHog di DevKinsta eseguendo il seguente comando Docker:

docker logs -f devkinsta_mailhog

Andate alla sezione knowledgebase di DevKinsta per maggiori informazioni.

Riepilogo

MailHog rende il test delle email un gioco da ragazzi. È una grande e pratica soluzione per testare le email del vostro sito web o della vostra web app. Inoltre, MailHog è semplice da configurare su quasi tutte le piattaforme popolari e ha un’interfaccia web facile da usare.

Come MailHog, DevKinsta è un ottimo modo per iniziare con lo sviluppo locale di WordPress. Non solo include MailHog per testare le email localmente, ma viene anche precaricato con Adminer per una facile gestione del database.

Con MailHog (e DevKinsta) dalla vostra parte, scoprirete che testare le email localmente non è mai stato così facile.

Se volete condividere la vostra esperienza o le vostre sfide nel testare le email a livello locale, scriveteci nella sezione dei commenti qui sotto.

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.