Send mailer qua sendgrid và sử dụng Sidekiq
I. Create ActionMailer rails generate mailer UserNotifier app/mailers/user_notice_mailer.rb class UserNoticeMailer < ApplicationMailer def send_email_after_account user, password @user = user @password = password mail to: user.email, subject: t("mailer.subject", name: ...
I. Create ActionMailer
rails generate mailer UserNotifier
app/mailers/user_notice_mailer.rb
class UserNoticeMailer < ApplicationMailer def send_email_after_account user, password @user = user @password = password mail to: user.email, subject: t("mailer.subject", name: @user.name) end end
app/views/user_notice_mailer/send_email_after_account.html.erb
<h3><%= t "mailer.title" %></h3> <div> <table> <tr> <td><strong><%= t "mailer.email" %></strong></td> <td><%= @user.email %></td> </tr> <tr> <td><strong><%= t "mailer.password" %></strong></td> <td><%= @password %></td> </tr> </table> </div>
Nếu bạn muốn thêm css cho view mailer thì add file css bằng lệnh này: app/assets/stylesheets/mailer_custom.scss <%= Rails.application.assets.find_asset("mailer_custom.scss").to_s %> app/views/layouts/mailer.html.erb
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> <%= Rails.application.assets.find_asset("mailer_custom.scss").to_s %> </style> </head> <body> <%= yield %> </body> </html>
app/controllers/users_controller.rb
def create @user = User.new create_user_params if @user.save #sau khi lưu sử dụng lệnh này để send mail UserNoticeMailer.send_email_after_account(@user, @user.password).deliver_later flash[:success] = t "devise.registrations.signed_up" redirect_to dashboard_users_path else render :new end end
II.Configure ActionMailer config/environments/development.rb
config.action_mailer.default_url_options = {host: ENV["HOST"]} config.action_mailer.smtp_settings = { address: ENV["ADDRESS"], port: ENV["PORT_MAILER"], authentication: ENV["AUTHENTICAION"], user_name: ENV["EMAIL_USERNAME"], password: ENV["EMAIL_PASSWORD"], domain: ENV["DOMAIN"], enable_starttls_auto: true }
config/environments/production.rb
config.action_mailer.default_url_options = {host: "localhost", port: 3000} config.action_mailer.smtp_settings = { address: ENV["ADDRESS"], port: ENV["PORT_MAILER"], authentication: ENV["AUTHENTICAION"], user_name: ENV["EMAIL_USERNAME"], password: ENV["EMAIL_PASSWORD"], domain: ENV["DOMAIN"], enable_starttls_auto: true }
Install gem "figaro" +bundle exec figaro install +config/application.yml Bạn cần tạo 1 tài khoản trên trang http://sendgrid.com/, sau đó nhập EMAIL_USERNAME, EMAIL_PASSWORD vào dưới
ADDRESS: "smtp.sendgrid.net" DOMAIN: "gmail.com" EMAIL_USERNAME: "xxxxxx" EMAIL_PASSWORD: "xxxxxx" AUTHENTICAION: "plain" PORT_MAILER: 587 HOST: "localhost:3000"
III.Sidekiq (Bạn có thể cài đặt gem này để hổ trợ việc chạy ngầm trong khi send mail)
+Sidekiq là một gem hỗ trỡ xử lý ngầm dưới background mạnh mẽ cho Ruby.
Nó nhằm mục đích là đơn giản để tích hợp với bất kỳ ứng dụng Rails hiện đại và
hiệu suất cao hơn nhiều so với các giải pháp hiện có khác.
+gem "sidekiq"
+bundle insltall
+ config/application.rb
Thêm lệnh này: config.active_job.queue_adapter = :sidekiq
+Bạn cần phải cài đặt redis-server ở terminal:
tin@tin-PC:~$ sudo apt-get install redis-server
- Sau đó chạy server
tin@tin-PC:~$ redis-server
- Sau đó vào project của bạn để chạy Sidekiq
tin@tin-PC:~/project_demo$ bundle exec sidekiq -q default -q mailers
Bây giờ các bạn thử send mailer.... Chúc các bạn thành công
Link tham khảo: https://sendgrid.com/docs/Integrate/Frameworks/rubyonrails.html