بسم الله الرحمن الرحيم

Prerequisite

Ruby 3.0.0 Rails 6.1.3 PostgreSQL 12.5 RSpec 4.0.0

Latar Belakang Masalah

Mungkin teman-teman pernah dalam situasi harus mendevelop fitur email di web aplikasi yang teman-teman bangun, tapi tidak ada internet.

Hahaha jarang sekali yaa. Tapi, misalkan kita sedang apes dan terjebak dalam situasi seperti itu.

Pemecahan Masalah

Kita akan menggunakan MailCatcher.

MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface.

Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that’s arrived so far.

Dengan MailCatcher, kita dapat manangkap email yang dikirimkan dengan prokotol SMTP ke localhost.

gambar_01

Sebenarnya, kita dapat membaca email dari log yang ditampilkan pada Rails server log. Namun, tentu saja kita tidak dapat melihat view template dari email.

Instalasi

Proses instalasi sangat mudah, selayaknya memasan gem.

$ gem install mailcatcher

Jalankan MailCatcher Daemon

Setelah proses instalasi selesai, jalankan MailCatcher daemon.

$ mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080/
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

Port 1025 denga protokol SMTP, akan kita pasangkan pada Rails.

Untuk mengakses MailCatcher Web Interface, dapat diakses dengan alamat,

http://127.0.0.1:1080

Rails Config

FILEconfig/environments/development.rb
1
2
3
config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: "127.0.0.1", port: 1025 }

Kalau menggunakan Devise, biasanya diminta untuk menambahkan,

config.action_mailer.default_url_options = { host: "localhost", port: 3000 }

Jadinya akan seperti ini

FILEconfig/environments/development.rb
1
2
3
4
config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: "127.0.0.1", port: 1025 }
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }

Sesuaikan saja dengan yang sudah ada. Jangan ada baris konfig yang berulang.

Perhatian!

Karena action_mailer.delivery_method di atas menggunakan protokol :smtp, kita perlu memisahkan antara ActionMailer development dengan production.

Apabila terdapat configurasi untuk ActionMailer pada file config/environment.rb, tinggal tambahkan kondisi untuk environment production.

FILEconfig/environment.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
# ...

# ActionMailer with Gmail
if Rails.env.production?
  ActionMailer::Base.smtp_settings = {
    port:                 587,
    address:              'smtp.gmail.com',
    user_name:            Rails.application.credentials.gmail[:SMTP_USER_NAME],
    password:             Rails.application.credentials.gmail[:SMTP_PASSWORD],
    authentication:       :plain,
    enable_starttls_auto: true
  }
end

Selesai!

Demonstrasi

gambar_02

Dengan begini, kita dapat menguji fitur email dengan berbagai macam alamat email yang akan langsung ditangkap oleh MailCatcher.


Pesan Penulis

Sepertinya, segini dulu yang dapat saya tuliskan.

Selanjutnya, saya serahkan kepada imajinasi dan kreatifitas teman-teman. Hehe.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

Referensi

  1. mailcatcher.me
    Diakses tanggal: 2021/03/11


Penulis

bandithijo

My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.

- Rizqi Nur Assyaufi

d98d8237fef8f1017d0be931b6e291341cbe6ca8