Sejak memasang "dark" theme, saya cenderung menjadi malas menulis. Untuk sementara, dark theme saya disable dulu yaa. Terima kasih (^_^) (bandithijo, 2024/09/15) ●
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.
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
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
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.
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
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
- mailcatcher.me
Diakses tanggal: 2021/03/11
Lisensi
Atribusi-NonKomersial-BerbagiSerupa 4.0 Internasional (CC BY-NC-SA 4.0)
Penulis
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