如何在用户使用 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 解决了这个问题