Send mailer qua sendgrid và sử dụng Sidekiq
Bài đăng này đã không được cập nhật trong 3 năm
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
All rights reserved