12/08/2018, 15:05

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             </div>
            
            <div class=

0