Action Mailer trong Rails
Gửi email là một tính năng gần như không thể thiếu ở bất kỳ trang web hiện đại nào hiện nay. Rails là một framework giúp tạo ra những ứng dụng web hiện đại, đầy đủ tính năng, vì vậy, việc gửi email cũng được Rails hỗ trợ rất tốt, thông qua Action Mailer. Ở bài này, mình sẽ nói qua về cách tạo một ...
Gửi email là một tính năng gần như không thể thiếu ở bất kỳ trang web hiện đại nào hiện nay. Rails là một framework giúp tạo ra những ứng dụng web hiện đại, đầy đủ tính năng, vì vậy, việc gửi email cũng được Rails hỗ trợ rất tốt, thông qua Action Mailer. Ở bài này, mình sẽ nói qua về cách tạo một Action Mailer, cấu hình Action Mailer để nó hoạt động như cách chúng ta muốn. Let's go!
1. Tạo Mailer
Để bắt đầu gửi email với Action Mailer, bạn chạy generator sau để tạo Mailer:
bin/rails generate mailer UserMailer
Sau khi chạy xong generator, bạn sẽ thấy các files do Mailer generator sinh ra có khá nhiều điểm tuơng đồng với Controller generator: chúng ta cũng lần lượt có mailer, thư mục views, và các test files.
2. Edit Mailer
Như đã đề cập ở trên, Mailer có nhiều điểm tuơng đồng với Controller, Mailer cũng có những actions, cũng có các views để render ra nội dung. Điểm khác nhau ở đây là Controller sẽ tạo ra các file HTML để gửi cho client, còn Mailer sẽ tạo ra các tin nhắn để có thể gửi qua email.
Giờ hãy mở file app/mailers/user_mailer và điền thử những thông tin như dưới đây, mình sẽ giải thích sau:
class UserMailer < ApplicationMailer default from: 'notifications@example.com' def welcome_email user @user = user @url = 'http://example.com/login' mail(to: @user.email, subject: 'Welcome to My Awesome Site') end end
Trong đó:
default
Chứa một hash các giá trị mặc định mà tất cả các email nhận được từ bạn. Trong trừong hợp này, chúng ta đã cài đặt để :from header luôn luôn có giá trị là notifications@example.com cho mọi messages sẽ được gửi đi trong file này.
Còn
def welcome_email user @user = user @url = 'http://example.com/login' mail(to: @user.email, subject: 'Welcome to My Awesome Site') end
là 1 method, tương tự actions trong Controller, trong đó mail(...) sẽ chính là nội dung được gửi đi. Method này nhận 2 giá trị là to-để chỉ định địa chỉ sẽ được gửi đến và subject-nội dung của subject thư. Có một điểm lưu ý nhỏ ở đây, là tuơng tự với Controller (nhiều tuơng tự quá đi