【问题标题】:Rails Action Mailer with Devise带有设计的 Rails Action Mailer
【发布时间】:2017-08-06 02:12:40
【问题描述】:

我知道之前有人问过这个问题,我一直在关注 Rails ActionMailer 指南,并查看了一些关于 stackoverflow 的相关问题。我正在运行本地主机并尝试从那里发送电子邮件。从导轨指南中,我遵循每一步并仔细检查了所有内容是否如指南中所述。我还阅读了一些在这里找到的问题,但我的电子邮件仍然没有从本地主机发送。此外,我的服务器中没有任何错误。

config/environments/development.rb

编辑

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

  #Mailers
  config.action_mailer.delivery_method = :sendmail
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_options = {from: 'dogseeker7@gmail.com'}

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'localhost:3000',
    user_name:            ENV["ADMIN_EMAIL"],                                                                                                                   
    password:             ENV["DOG_SEEKER_GMAIL"],
    authentication:       'plain',
    enable_starttls_auto: true
}

mailers/admin_mailer.rb

Class AdminMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers    

编辑

def welcome_email(admin)                                                                                                                                
    @admin = admin
    @login_url = "localhost:3000/admins/sign_in"
    mail(to: @admin.email, subject: "Welcome to Dog Seeker!")
end

app/admin/admin_controllers.rb

def create
   @admin = Admin.new(params[:admin])

   respond_to do |format|
     if @admin.save
       AdminMailer.welcome_email(@admin).deliver_now
       format.html { redirect_to(@admin, notice: 'Admin was successfully created.') }
       format.json { render json: @admin, status: :created, location: @admin }
     else
       format.html { redirect_to new_admin_registration_path }
       format.json { render json: @admin.errors, status: :unprocessable_entity }
     end
   end
 end

更新

新管理员注册时记录

Started POST "/admins" for 127.0.0.1 at 2017-08-05 22:09:15 -0700
Processing by Devise::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"<token>==", "admin"=>{"email"=>"stenglinephoto@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
   (0.2ms)  BEGIN
  Admin Exists (0.6ms)  SELECT  1 AS one FROM "admins" WHERE "admins"."email" = $1 LIMIT $2  [["email", "stenglinephoto@gmail.com"], ["LIMIT", 1]]
  SQL (0.6ms)  INSERT INTO "admins" ("email", "encrypted_password", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["email", "stenglinephoto@gmail.com"], ["encrypted_password", "<password>"], ["created_at", "2017-08-06 05:09:15.904920"], ["updated_at", "2017-08-06 05:09:15.904920"]]
   (2.0ms)  COMMIT
   (0.1ms)  BEGIN
  SQL (0.5ms)  UPDATE "admins" SET "sign_in_count" = $1, "current_sign_in_at" = $2, "last_sign_in_at" = $3, "current_sign_in_ip" = $4, "last_sign_in_ip" = $5, "updated_at" = $6 WHERE "admins"."id" = $7  [["sign_in_count", 1], ["current_sign_in_at", "2017-08-06 05:09:15.909337"], ["last_sign_in_at", "2017-08-06 05:09:15.909337"], ["current_sign_in_ip", "127.0.0.1/32"], ["last_sign_in_ip", "127.0.0.1/32"], ["updated_at", "2017-08-06 05:09:15.909955"], ["id", 29]]
   (0.5ms)  COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 172ms (ActiveRecord: 4.5ms)


Started GET "/" for 127.0.0.1 at 2017-08-05 22:09:15 -0700
Processing by HomepagesController#index as HTML
  Rendering homepages/index.html.erb within layouts/application
  Rendered homepages/index.html.erb within layouts/application (0.5ms)
  Admin Load (0.7ms)  SELECT  "admins".* FROM "admins" WHERE "admins"."id" = $1 ORDER BY "admins"."id" ASC LIMIT $2  [["id", 29], ["LIMIT", 1]]
  Rendered shared/_header.html.erb (5.5ms)
  Rendered shared/_main.html.erb (1.0ms)
Completed 200 OK in 18ms (Views: 16.2ms | ActiveRecord: 0.7ms)

另一个更新

我有另一个邮件程序,它在创建狗时发送,并且可以从 localhost 和所有上述配置正常工作。我的猜测是创建管理员帐户时邮件不会发送的原因是由于设计注册控制器覆盖了我的控制器。换句话说,它不是在 admin_controller 中点击我的创建操作,而是在设计注册控制器中点击注册。

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 从我过去使用 ActionMailer 的情况来看,我不相信电子邮件会通过开发发送。查看您的日志,您应该会在那里看到电子邮件。
  • 我认为它应该去。我们需要日志来查看事情是如何被触发的。但是,我建议使用 Mailhog 或 mailcatcher(最新的是 gem 并且两者都在 Docker 中可用,因此它们不会弄乱您的环境)。
  • @login_url = "https://dogseeker.herokuapp.com/admins/sign_in" 上面的代码中有一些东西引起了我的注意,而实际上您将开发环境的 url 定义为config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } 。因此,如果您的问题是针对开发或生产(测试或登台)环境,我不明白。
  • 嗨,斯蒂芬,感谢您的收看。澄清一下,我的应用程序目前正在开发中。当我部署到生产环境时,这将是 URL。当我在开发中时,@login_url 会有所不同吗?
  • 这并不能回答您的问题,但在开发期间您应该指向开发 URL,在登台期间,指向登台 URL 等等。这样您就可以确保开发、测试、(暂存)和生产是分开的,并且不会混淆。一点。使用 Google 发送电子邮件有限制(发送的电子邮件数量等)。您可以通过免费计划找到相当不错的替代方案(例如 www.sparkpost.com)。你能分享你的应用程序的日志吗?

标签: ruby-on-rails devise actionmailer


【解决方案1】:

必须遵循 Devise Wiki 的指南,并且在管理员注册时能够使其工作。

【讨论】:

  • +1。谢谢凯尔。实施可确认的用户帐户对我也有帮助。我有同样的问题。我确定欢迎电子邮件的错误仍然存​​在,因为欢迎电子邮件不是确认电子邮件。如果您最终发现欢迎电子邮件出了什么问题,请告诉我。
  • 嘿@inmydelorean,我已经有一段时间没有查看代码了,但我确实记得收到了确认电子邮件。欢迎您查看代码here。我意识到这并不理想,但我可能需要更长的时间来寻找细节,因为它在我的脑海中并不新鲜。
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多