BanditHijo.dev

Notifikasi User Sign Up ke Email Admin dengan ActionMailer Rails

Created at: 2021-03-26
Author by: BanditHijo

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.

app/mailers/application_mailer.rb
1class ApplicationMailer < ActionMailer::Base
2 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).

app/mailers/admin_mailer.rb
1class AdminMailer < ApplicationMailer
2 default to: "admin@siaga-covid19.herokuapp.com"
3
4 def new_user(user)
5 @user = user
6 mail(subject: "SiagaCOVID19 - New User: #{user.email}")
7 end
8end

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.

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.

app/models/user.rb
1class User < ApplicationRecord
2 after_create :send_notification
3
4 def send_notification
5 AdminMailer.new_user(self).deliver
6 end
7end

Selesai!

Hasilnya

Apabila terdapat user baru yang mendaftarkan account, admin akan mendapatkan email seperti ini.

Gambar 1

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

  1. Rails Guides - Action Mailer Basics
    Diakses tanggal: 2021/03/26

  2. github.com/rails/rails/
    Diakses tanggal: 2021/03/26

  3. GoRails - Sending Emails in Rails with Mandrill
    Diakses tanggal: 2021/03/26