Notifikasi User Sign Up ke Email Admin dengan ActionMailer Rails
Prerequisite
ruby 3.0.0
rails 6.1.3
Latar Belakang Masalah
Membuat fitur email notifikasi ke email admin apabila terdapat user baru yang mendaftar (signup) ke web aplikasi yang kita develop.
Pemecahan Masalah
Generate Mailer
Saya akan memberikan nama AdminMailer untuk fitur mailer yang akan dibuat.
$ rails g mailer AdminMailer
Perintah ini akan mengenerate file mailers dan juga directory views yang bernama admin_mailer.
📂 app/
│ 📁 assets/
│ 📁 channels/
│ 📁 controllers/
│ 📁 helpers/
│ 📁 javascript/
│ 📁 jobs/
│ 📂 mailers/
│ │ 📄 admin_mailer.rb 👈️
│ └ 📄 application_mailer.rb
│ 📁 models/
└ 📂 views/
│ 📁 admin_mailer/ 👈️
└ 📁 layouts/
📁 bin/
📁 config/
📁 db/
...
...
Konfigurasi Mailer
Modifikasi alamat from,
1default from: 'from@example.com'
sesuai yang kita inginkan.
1class ApplicationMailer < ActionMailer::Base2 default from: "no-reply@siaga-covid19.herokuapp.com"3 layout "mailer"4end
Selanjutnya, modifikasi file admin_mailer.rb, yang sudah kita generate sebelumnya.
Kita akan mendefinisikan alamat email admin default to: dan juga mendefinisikan fungsi untuk new_user(user).
1class AdminMailer < ApplicationMailer2 default to: "admin@siaga-covid19.herokuapp.com"34 def new_user(user)5 @user = user6 mail(subject: "SiagaCOVID19 - New User: #{user.email}")7 end8end
Saya membuat instance variable @user
yang akan saya gunakan pada view template.
Mailer Views Template
Pada file app/mailers/admin_mailer.rb, kita sudah mendefinisikan sebuah method yang bernama new_user().
Seperti halnya controller, method tersebut juga merupakan action yang akan menghubungkan dengan view template.
Jadi kita akan membuat file bernama app/views/admin_mailer/new_user.html.erb.
1<h1>New User!</h1>2<p>There is new user joined SiagaCOVID19:</p>3<h3><%= @user.email %></h3>
Template di atas, dapat teman-teman buat sesuai preferensi masing-masing.
Yang saya catat di atas, hanya contoh sederhana saja.
Models
Karena kita akan memberikan notifikasi email apabila terdapat user baru yang mendaftar, maka logika bisnis untuk mengirimkan notifikasi akan kita letakkan pada user model.
1class User < ApplicationRecord2 after_create :send_notification34 def send_notification5 AdminMailer.new_user(self).deliver6 end7end
Selesai!
Hasilnya
Apabila terdapat user baru yang mendaftarkan account, admin akan mendapatkan email seperti ini.
Gambar 1. Email yang dikirimkan ke admin jika ada user baru yang mendaftar
Template email ini, sesuai dengan template yang kita didefinisikan pada app/views/admin_mailer/new_user.html.erb.
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
-
Rails Guides - Action Mailer Basics
Diakses tanggal: 2021/03/26 -
github.com/rails/rails/
Diakses tanggal: 2021/03/26 -
GoRails - Sending Emails in Rails with Mandrill
Diakses tanggal: 2021/03/26