如何使用Devise设置电子邮件确认?


127

是否有一个教程可以解释如何从头开始(在开发和生产中)设置Devise的注册确认电子邮件,即,如果没有设置Action Mailer?

Google搜索刚刚发现了一堆与此相关的独立片段。没有人能解释得足够多,我不确定它们如何组合在一起。是否有逐步的解释,甚至可以解释初始步骤?


终于成功了。遵循下面接受的答案中的所有步骤,然后将以下内容添加到我的environment.rb文件中:

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :tls => true,
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => :login,
   :user_name => "[username]",
   :password => "[password]"
 }

Answers:


208

1.确保在Model.devise调用中包括了确认

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmable ...
end

2.确保您向用户迁移添加确认

create_table :users do |t|
  t.database_authenticatable
  t.confirmable
  ...
end

如果您使用的是devise 2.0+,则此操作将失败,因为devise不再提供迁移帮助器,因此t.confirmable会引发错误。而是从其迁移指南中复制标有“ Confirmable”的块。

3.使用以下两个命令之一生成devise视图,以便您可以覆盖devise邮件程序视图:

rails generate devise:views # global
rails generate devise:views users # scoped

现在,您可以在中devise/mailer/confirmation_instructions.html.erbusers/mailer/confirmation_instructions.html.erb根据设置覆盖邮件视图

4.对于开发环境,在其中添加以下配置行/config/environments/development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

5.对于生产环境,/config/environments/production.rb您可以使用类似于以下内容的设备(假设您在localhost:25上具有SMTP服务器):

config.action_mailer.default_url_options = {:host => 'yourdomain.com'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "127.0.0.1",
  :port    => 25,
  :domain  => 'yourdomain.com'
}

6要测试开发中的设置,请安装mailcatcher gem,它将在开发中用作SMTP服务器,捕获所有传入的邮件并将它们显示在http://localhost:1080/

gem install mailcatcher

安装完成后,使用以下命令启动mailcatcher服务器:

mailcatcher

一个玩具SMTP服务器将在端口1025上运行,以捕获电子邮件并将其放到HTTP端口1080上。

现在,您可以创建一个帐户并查看确认。


哇,感谢您提供的如此全面的答案。我已经使其工作正常,以便邮件捕获器可以捕获电子邮件,但是收件箱中实际上没有显示电子邮件。我尝试了两个不同的电子邮件地址,并检查了两个中的垃圾邮件文件夹。我这里可能缺少什么吗?(我处于开发模式)。
jyli7 2011年

1
在开发中,您不需要实际将电子邮件发送到该地址。Mailcatcher在localhost:1080上具有一个Web界面,您可以打开它并查看捕获的电子邮件-这样做的重点是,使开发过程变得简单。但是,在生产中,您想使用真正的SMTP服务器(Google Apps,qmail,postfix等,请与系统管理员联系)
clyfe 2011年

3
并且不要忘记重启服务器!
马特·邦德

10
Devise 2.0不再提供迁移助手,因此t.confirmable会引发错误。取而代之的是,从其迁移指南中复制标记为“可确认”的块:github.com/plataformatec/devise/wiki/…–
Ross Allen

1
真棒教程...谢谢分享.. +1 ..另外值得一看到如何添加:确定到用户页面。
奥雅纳(Arup Rakshit)2015年

7

我相信您应该再次对其进行编辑...端口号。应该用引号..这样的:-

:port => "587",

我在Rails 3.2.0 / ruby​​ 1.9.2中遇到问题


正确。或者,"1025"如果使用mailcatcher。
艾蒂安

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.