如何在用户使用 Devise 注册后发送欢迎电子邮件
How to send welcome email after user registers using Devise
我正在尝试在使用 Devise 注册后向用户发送电子邮件通知。我已经正确设置了所有与邮件程序相关的文件,并且可以使用 rails 控制台正确发送电子邮件。
但是,我在 Registrations Controller 中编写的代码并没有像我打算的那样发送电子邮件。
如果有任何关于如何解决这个问题的建议,我将不胜感激。谢谢!
class RegistrationsController < Devise::RegistrationsController
def create
super
@user = User.new(user_params)
UserMailer.welcome_email(@user).deliver_now
end
private
def after_sign_up_path_for(resource)
static_pages_welcome_path
end
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :broker, :buyer, :status)
end
end
app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
default from: 'railsnewappnotificationaug2021@gmail.com'
layout 'mailer'
def welcome_email(user)
@user = user
mail(to: @user.email, subject: 'Welcome to StockTradingApp')
end
app/views/user_mailer/welcome_email.html.erb
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Welcome to StockTradingApp, <%= @user.email %></h1>
<p>
You have successfully signed up for buyer account.<br>
</p>
</body>
</html>
app/config/development.rb
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.default_options = { from: 'railsnewappnotificationaug2021@gmail.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"],
authentication: 'plain',
enable_starttls_auto: true }
logs
Started GET "/users/sign_up" for ::1 at 2021-08-26 21:28:17 +0800
Processing by Devise::RegistrationsController#new as HTML
Rendering layout layouts/application.html.erb
Rendering devise/registrations/new.html.erb within layouts/application
Rendered devise/shared/_error_messages.html.erb (Duration: 0.1ms | Allocations: 41)
Rendered devise/shared/_links.html.erb (Duration: 0.4ms | Allocations: 114)
Rendered devise/registrations/new.html.erb within layouts/application (Duration: 5.2ms | Allocations: 1856)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 0.6ms | Allocations: 127)
Rendered layouts/_notices.html.erb (Duration: 0.2ms | Allocations: 59)
Rendered layout layouts/application.html.erb (Duration: 21.7ms | Allocations: 8245)
Completed 200 OK in 50ms (Views: 28.3ms | ActiveRecord: 0.0ms | Allocations: 14158)
Started GET "/users/sign_up" for ::1 at 2021-08-26 21:28:17 +0800
Processing by Devise::RegistrationsController#new as HTML
Rendering layout layouts/application.html.erb
Rendering devise/registrations/new.html.erb within layouts/application
Rendered devise/shared/_error_messages.html.erb (Duration: 0.2ms | Allocations: 41)
Rendered devise/shared/_links.html.erb (Duration: 0.3ms | Allocations: 106)
Rendered devise/registrations/new.html.erb within layouts/application (Duration: 6.6ms | Allocations: 1775)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 0.6ms | Allocations: 121)
Rendered layouts/_notices.html.erb (Duration: 0.2ms | Allocations: 52)
Rendered layout layouts/application.html.erb (Duration: 19.6ms | Allocations: 8070)
Completed 200 OK in 24ms (Views: 20.9ms | ActiveRecord: 0.0ms | Allocations: 8612)
Started POST "/users" for ::1 at 2021-08-26 21:28:47 +0800
[1m[35m (2.4ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
Processing by Devise::RegistrationsController#create as HTML
Parameters: {"authenticity_token"=>"ZwoUYUwl1YXuDfa8rhb3lIPfRgguEe+peM5VlrSKy2w7IsxI0U6hLps1F0DO6ou88q3Iq+5ZlqRcp7+aWVNl8w==", "user"=>{"email"=>"saoirxechen8596@gmail.com", "role_names"=>["", "broker"], "broker"=>"true", "buyer"=>"false", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
[1m[36mRole Load (1.7ms)[0m [1m[34mSELECT "roles".* FROM "roles" WHERE (name IN ('','broker'))[0m
↳ app/models/user.rb:56:in `role_names='
[1m[36mTRANSACTION (1.5ms)[0m [1m[35mBEGIN[0m
[1m[36mUser Exists? (1.9ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = LIMIT [0m [["email", "saoirxechen8596@gmail.com"], ["LIMIT", 1]]
[1m[36mCACHE User Exists? (0.0ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = LIMIT [0m [["email", "saoirxechen8596@gmail.com"], ["LIMIT", 1]]
[1m[36mUser Create (1.7ms)[0m [1m[32mINSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "broker", "buyer", "status") VALUES (, , , , , , ) RETURNING "id"[0m [["email", "saoirxechen8596@gmail.com"], ["encrypted_password", "ax1V3lOOwzWfZ8pw0gxUHu8BSApITAqSVcXR0ivyoh63Te39D.8ii"], ["created_at", "2021-08-26 13:28:47.845883"], ["updated_at", "2021-08-26 13:28:47.845883"], ["broker", true], ["buyer", false], ["status", "Pending"]]
[1m[36mRoleUser Create (2.4ms)[0m [1m[32mINSERT INTO "role_users" ("role_id", "user_id", "created_at", "updated_at") VALUES (, , , ) RETURNING "id"[0m [["role_id", 2], ["user_id", 74], ["created_at", "2021-08-26 13:28:47.851990"], ["updated_at", "2021-08-26 13:28:47.851990"]]
[1m[36mTRANSACTION (8.9ms)[0m [1m[35mCOMMIT[0m
Redirected to http://localhost:3000/static_pages/welcome
Completed 302 Found in 756ms (ActiveRecord: 38.9ms | Allocations: 375195)
Started GET "/static_pages/welcome" for ::1 at 2021-08-26 21:28:48 +0800
Processing by StaticPagesController#welcome as HTML
Rendering layout layouts/application.html.erb
Rendering static_pages/welcome.html.erb within layouts/application
[1m[36mUser Load (1.5ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = ORDER BY "users"."id" ASC LIMIT [0m [["id", 74], ["LIMIT", 1]]
↳ app/views/static_pages/welcome.html.erb:1
[1m[36mUser Load (1.2ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = LIMIT [0m [["id", 74], ["LIMIT", 1]]
↳ app/helpers/static_pages_helper.rb:3:in `get_user_name'
Rendered static_pages/welcome.html.erb within layouts/application (Duration: 15.0ms | Allocations: 3394)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 1.0ms | Allocations: 289)
Rendered layouts/_notices.html.erb (Duration: 0.7ms | Allocations: 236)
Rendered layout layouts/application.html.erb (Duration: 60.5ms | Allocations: 18385)
Completed 200 OK in 67ms (Views: 60.4ms | ActiveRecord: 4.0ms | Allocations: 20147)
我通过使用回调 after_create
.
移动模型 (user.rb
) 中的 UserMailer.welcome_email(user).deliver_now
解决了这个问题
我正在尝试在使用 Devise 注册后向用户发送电子邮件通知。我已经正确设置了所有与邮件程序相关的文件,并且可以使用 rails 控制台正确发送电子邮件。
但是,我在 Registrations Controller 中编写的代码并没有像我打算的那样发送电子邮件。
如果有任何关于如何解决这个问题的建议,我将不胜感激。谢谢!
class RegistrationsController < Devise::RegistrationsController
def create
super
@user = User.new(user_params)
UserMailer.welcome_email(@user).deliver_now
end
private
def after_sign_up_path_for(resource)
static_pages_welcome_path
end
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :broker, :buyer, :status)
end
end
app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
default from: 'railsnewappnotificationaug2021@gmail.com'
layout 'mailer'
def welcome_email(user)
@user = user
mail(to: @user.email, subject: 'Welcome to StockTradingApp')
end
app/views/user_mailer/welcome_email.html.erb
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Welcome to StockTradingApp, <%= @user.email %></h1>
<p>
You have successfully signed up for buyer account.<br>
</p>
</body>
</html>
app/config/development.rb
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.default_options = { from: 'railsnewappnotificationaug2021@gmail.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"],
authentication: 'plain',
enable_starttls_auto: true }
logs
Started GET "/users/sign_up" for ::1 at 2021-08-26 21:28:17 +0800
Processing by Devise::RegistrationsController#new as HTML
Rendering layout layouts/application.html.erb
Rendering devise/registrations/new.html.erb within layouts/application
Rendered devise/shared/_error_messages.html.erb (Duration: 0.1ms | Allocations: 41)
Rendered devise/shared/_links.html.erb (Duration: 0.4ms | Allocations: 114)
Rendered devise/registrations/new.html.erb within layouts/application (Duration: 5.2ms | Allocations: 1856)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 0.6ms | Allocations: 127)
Rendered layouts/_notices.html.erb (Duration: 0.2ms | Allocations: 59)
Rendered layout layouts/application.html.erb (Duration: 21.7ms | Allocations: 8245)
Completed 200 OK in 50ms (Views: 28.3ms | ActiveRecord: 0.0ms | Allocations: 14158)
Started GET "/users/sign_up" for ::1 at 2021-08-26 21:28:17 +0800
Processing by Devise::RegistrationsController#new as HTML
Rendering layout layouts/application.html.erb
Rendering devise/registrations/new.html.erb within layouts/application
Rendered devise/shared/_error_messages.html.erb (Duration: 0.2ms | Allocations: 41)
Rendered devise/shared/_links.html.erb (Duration: 0.3ms | Allocations: 106)
Rendered devise/registrations/new.html.erb within layouts/application (Duration: 6.6ms | Allocations: 1775)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 0.6ms | Allocations: 121)
Rendered layouts/_notices.html.erb (Duration: 0.2ms | Allocations: 52)
Rendered layout layouts/application.html.erb (Duration: 19.6ms | Allocations: 8070)
Completed 200 OK in 24ms (Views: 20.9ms | ActiveRecord: 0.0ms | Allocations: 8612)
Started POST "/users" for ::1 at 2021-08-26 21:28:47 +0800
[1m[35m (2.4ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
Processing by Devise::RegistrationsController#create as HTML
Parameters: {"authenticity_token"=>"ZwoUYUwl1YXuDfa8rhb3lIPfRgguEe+peM5VlrSKy2w7IsxI0U6hLps1F0DO6ou88q3Iq+5ZlqRcp7+aWVNl8w==", "user"=>{"email"=>"saoirxechen8596@gmail.com", "role_names"=>["", "broker"], "broker"=>"true", "buyer"=>"false", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
[1m[36mRole Load (1.7ms)[0m [1m[34mSELECT "roles".* FROM "roles" WHERE (name IN ('','broker'))[0m
↳ app/models/user.rb:56:in `role_names='
[1m[36mTRANSACTION (1.5ms)[0m [1m[35mBEGIN[0m
[1m[36mUser Exists? (1.9ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = LIMIT [0m [["email", "saoirxechen8596@gmail.com"], ["LIMIT", 1]]
[1m[36mCACHE User Exists? (0.0ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = LIMIT [0m [["email", "saoirxechen8596@gmail.com"], ["LIMIT", 1]]
[1m[36mUser Create (1.7ms)[0m [1m[32mINSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "broker", "buyer", "status") VALUES (, , , , , , ) RETURNING "id"[0m [["email", "saoirxechen8596@gmail.com"], ["encrypted_password", "ax1V3lOOwzWfZ8pw0gxUHu8BSApITAqSVcXR0ivyoh63Te39D.8ii"], ["created_at", "2021-08-26 13:28:47.845883"], ["updated_at", "2021-08-26 13:28:47.845883"], ["broker", true], ["buyer", false], ["status", "Pending"]]
[1m[36mRoleUser Create (2.4ms)[0m [1m[32mINSERT INTO "role_users" ("role_id", "user_id", "created_at", "updated_at") VALUES (, , , ) RETURNING "id"[0m [["role_id", 2], ["user_id", 74], ["created_at", "2021-08-26 13:28:47.851990"], ["updated_at", "2021-08-26 13:28:47.851990"]]
[1m[36mTRANSACTION (8.9ms)[0m [1m[35mCOMMIT[0m
Redirected to http://localhost:3000/static_pages/welcome
Completed 302 Found in 756ms (ActiveRecord: 38.9ms | Allocations: 375195)
Started GET "/static_pages/welcome" for ::1 at 2021-08-26 21:28:48 +0800
Processing by StaticPagesController#welcome as HTML
Rendering layout layouts/application.html.erb
Rendering static_pages/welcome.html.erb within layouts/application
[1m[36mUser Load (1.5ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = ORDER BY "users"."id" ASC LIMIT [0m [["id", 74], ["LIMIT", 1]]
↳ app/views/static_pages/welcome.html.erb:1
[1m[36mUser Load (1.2ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = LIMIT [0m [["id", 74], ["LIMIT", 1]]
↳ app/helpers/static_pages_helper.rb:3:in `get_user_name'
Rendered static_pages/welcome.html.erb within layouts/application (Duration: 15.0ms | Allocations: 3394)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_header.html.erb (Duration: 1.0ms | Allocations: 289)
Rendered layouts/_notices.html.erb (Duration: 0.7ms | Allocations: 236)
Rendered layout layouts/application.html.erb (Duration: 60.5ms | Allocations: 18385)
Completed 200 OK in 67ms (Views: 60.4ms | ActiveRecord: 4.0ms | Allocations: 20147)
我通过使用回调 after_create
.
user.rb
) 中的 UserMailer.welcome_email(user).deliver_now
解决了这个问题