Menginstal MailHog pada Development Server sebagai Pengganti Mailtrap.io

4 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Menginstal MailHog pada Development Server
MailHog SMTP Server untuk Testing

TeknoCerdas.com – Salam cerdas untuk kita semua. Pada kesempatan ini penulis akan membahas tutorial bagaimana menginstal MailHog pada development server sebagai pengganti mailtrap.io.

Mailtrap.io adalah layanan SMTP populer yang digunakan saat melakukan pengembangan aplikasi. Dengan mailtrap.io pengembang tidak perlu khawatir email yang dikirim secara tidak sengaja berakhir di inbox asli pengguna.

MailHog adalah SMTP server yang digunakan untuk pengetesan utamanya pada komputer lokal. Kelebihan dari MailHog adalah mudah diinstal karena hanya sebuah file executable dan menyedian antarmuka Web untuk mengakses inbox email.

Bagi tim dengan dana terbatas dan tidak bisa melakukan upgrade versi Mailtrap.io ke paket yang lebih tinggi. MailHog dapat menjadi alternatif yang menarik meskipun fitur terbatas.

Daftar Isi

Persiapan Menginstal MailHog pada Development Server

Sebelum mulai membuat menginstal MailHog pada development server terdapat beberapa prasyarat yang harus anda penuhi.

  • Anda memiliki sebuah server atau VM yang dapat diakses lewat internet. Anda dapat menggunakan AWS Lightsail, Linode atau DigitalOcean jika belum punya.
  • Anda memahami dasar-dasar bagaimana menggunakan Linux server terutama Command Line Interface (CLI).
  • Anda memahami konsep HTTP reverse proxy
  • Anda memahami konsep pengiriman email lewat SMTP
  • Anda memahami konsep DNS

Jika anda tidak memiliki prasyarat diatas silahkan lanjutkan membaca. Karena mungkin banyak informasi baru yang diperoleh meskipun tanpa mencoba langsung tutorial ini.

Menginstal MailHog pada Development Server

Karen alasan keamanan menjalankan MailHog sebagai root tidak disarankan. Untuk itu sebelum menginstal MailHog kita akan terlebih dulu membuat user yang akan digunakan untuk menjalankan mailhog.

$ useradd -d /opt/mailhog -m -s /bin/bash mailhog

Secara default MailHog akan menyimpan email di RAM jadi ketika server reboot maka data email di inbox akan hilang. Untuk menghindari hal tersebut kita perlu menyiapkan direktori tempat menyimpan email.

$ sudo -u mailhog mkdir -p /opt/mailhog/storage

Beritkunya langkah untuk instalasi MailHog kedalam direktori /opt/mailhog/bin.

$ sudo -u mailhog mkdir -p /opt/mailhog/bin
$ MAILHOG_VERSION=1.0.0
$ MAILHOG_DOWNLOAD_URL=https://github.com/mailhog/MailHog/releases/download/v${MAILHOG_VERSION}/MailHog_linux_amd64
$ sudo -u mailhog curl -s -L -o /opt/mailhog/bin/mailhog $MAILHOG_DOWNLOAD_URL
$ sudo chmod +x /opt/mailhog/bin/mailhog

Verifikasi bahwa file executable MailHog bisa dijalankan sebagai user mailhog.

$ sudo -u mailhog /opt/mailhog/bin/mailhog
2020/06/06 23:54:35 Using in-memory storage
2020/06/06 23:54:35 [SMTP] Binding to address: 0.0.0.0:1025
[HTTP] Binding to address: 0.0.0.0:8025
2020/06/06 23:54:35 Serving under http://0.0.0.0:8025/
Creating API v1 with WebPath:
Creating API v2 with WebPath:

Terlihat bahwa MailHog sukses dijalankan. SMTP server dapat diakses lewat port 1025 dan antarmuka webmail pada port 8025. Semunya mendengarkan dari interface IP lokal 127.0.0.1. Tekan CTRL+C untuk menghentikan MailHog.

Membuat MailHog Dijalankan saat Boot Menggunakan systemd

Agar MailHog dapat berjalan sebagai proses background salah satu cara adalah lewat systemd. Keuntungan lain menggunakan systemd adalah MailHog bisa dijalankan saat boot.

Pertama adalah membuat sebuah systemd service yang disebut unit untuk MailHog.

$ sudo vi /etc/systemd/system/mailhog.service
[Unit]
Description=Mailhog fake mailserver
After=network.target

[Service]
Type=simple
User=mailhog
Group=mailhog
ExecStart=/opt/mailhog/bin/mailhog --storage maildir --maildir-path /opt/mailhog/storage/ -ui-bind-addr "127.0.0.1:8025" -api-bind-addr "127.0.0.1:8025" -smtp-bind-addr "127.0.0.1:1025"
[Install]
WantedBy=multi-user.target

Langkah berikutnya adalah mengaktifkan service MailHog agar berjalan saat boot.

$ sudo systemctl enable mailhog.service

Untuk menjalankan lewat systemd gunakan perintah berikut.

$ sudo systemctl start mailhog.service

Status dari background proses mailhog dapat dipantau dengan systemd.

$ sudo systemctl status mailhog.service
● mailhog.service - Mailhog fake mailserver
     Loaded: loaded (/etc/systemd/system/mailhog.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-06-07 01:37:05 UTC; 57s ago
   Main PID: 17077 (mailhog)
      Tasks: 3 (limit: 1145)
     Memory: 1.6M
     CGroup: /system.slice/mailhog.service
             └─17077 /opt/mailhog/bin/mailhog --storage maildir --maildir-path /opt/mailhog/storage/ -ui-bind-addr 127.0.0.1:8025 -api-bind-addr 127.0.0.1:8025 -smtp-bind-addr 127.0.0.1:1025

Menginstal Nginx sebagai Reverse Proxy MailHog

Kita akan menempatkan Nginx didepan MailHog sebagai Reverse Proxy. Sehingga MailHog relatif lebih aman karena tidak terekspose ke publik.

$ sudo apt install -y nginx

Berikutnya adalah melakukan konfigurasi virtual host agar MailHog dapat diakses menggunakan nama domain. Dalam contoh tutorial ini penulis menggunakan domain mailhog.teknocerdas.com. Nginx akan melakukan reverse proxy pada webmail MailHog yang memiliki alamat http://127.0.0.1:8025/.

$ sudo vi /etc/nginx/sites-available/mailhog.teknocerdas.com.conf
server {
    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name mailhog.teknocerdas.com;

    location /api/v2/websocket {
        proxy_pass http://127.0.0.1:8025;
        proxy_http_version 1.1;
        proxy_set_header Upgrade \$http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    location / {
        auth_basic "Administrator Access";
        auth_basic_user_file /etc/nginx/nginx.passwd;
        proxy_pass http://127.0.0.1:8025;
    }

    listen 80;
}

Memproteksi MailHog dengan Password

Karena MailHog akan diakses lewat internet maka keharusan untuk memproteksinya dengan password. Penulis menggunakan OpenSSL untuk membuat password yang akan diakses oleh Nginx.

Password file akan disimpan pada file /etc/nginx/nginx.passwd. Jalankan perintah dibawah ini untuk membuat password.

$ echo teknocerdas:$( openssl passwd -apr1 "orang.cerdas" ) | sudo tee /etc/nginx/nginx.passwd

Pada contoh diatas penulis menggunakan username “teknocerdas” dan password “orang.cerdas”.

Terakhir Pastikan semua konfigurasi benar lalu reload Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

Mangarahkan Domain MailHog ke IP Development Server

Masuk pada DNS manager untuk mengelola domain anda. Buat sebuah A record baru untuk MailHog misal mailhog.teknocerdas.com dan arahkan ke IP publik dari development server yang digunakan untuk hosting MailHog.

Penulis menggunakan CloudFlare selain gratis juga menyediakan free SSL certificate. Sehingga akses ke MailHog otomatis menggunakan HTTPS.

Jika anda hanyalah pengembang tunggal yang akan mengakses MailHog, maka modifikasi /etc/hosts pada komputer lokal anda mungkin sudah cukup.

Tes Kirim Email lewat SMTP Menggunakan Telnet

Penulis tidak akan menggunakan pustaka bahasa pemrograman tertentu atau aplikasi yang spesifik untuk pengiriman email. Penulis akan menggunakan Telnet untuk mengirimkan email lewat SMTP.

Pada development server jalankan perintah perintah berikut untuk melakukan koneksi ke server SMTP MailHog pada port 1025. SMTP MailHog secara default tidak memerlukan otentikasi.

$ telnet localhost 1025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailhog.example ESMTP MailHog

Beri salam untuk server biar akrab :).

HELO localhost
250 Hello localhost

Berikutnya masukkan alamat email pengirim. Contoh adalah .

MAIL FROM: 
250 Sender rio@teknocerdas.com ok

Masukkan alamat email penerima. Dalam contoh kali ini adalah .

RCPT TO: 
250 Recipient gates@microsoft.com ok

Berikutnya adalah isi dari email. Diawali dengan aturan DATA . (DATA titik ENTER) .

DATA .
354 End data with .

Lanjut mengisi body dari email. Akhiri dengan . (ENTER titik ENTER).

Subject: "Hello Bill!"
From: Rio Astamal 
To: Bill Gates 

Hello Bill,

Jika ada karyawan yang kurang cerdas tolong disuruh baca TeknoCerdas.com.

Salam,
Teknocerdas.com
.
250 Ok: queued as Uvi2_j1XQ8G3OWnzy8olrrtCpGityA1a67EWuHoI-QU=@mailhog.example

Buka MailHog pada browser harusnya email yang baru saja kita kirim lewat SMTP akan ditampilkan oleh MailHog.

Melihat Email Masuk pada MailHog
Melihat Email Masuk pada MailHog