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

139
有没有一个教程能够从头开始讲解如何设置Devise的注册确认电子邮件(在开发和生产环境中),即如果您没有设置Action Mailer的情况下?通过谷歌搜索只能找到一堆相关的独立片段。没有任何一个片段提供了足够的解释,我也不确定它们如何配合。是否有一个逐步解释的说明,或者甚至是解释初始步骤的东西?
最终使其工作。按照下面接受的答案中的所有步骤操作,然后将以下内容添加到我的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]"
 }
3个回答

221

1. 确保在 Model.devise 调用中包含 confirmable

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不再提供迁移助手,因此会引发错误。相反,请从他们的迁移指南中复制标记为“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中的生产环境,您可以使用类似以下内容的设置(假设您在本地主机上有一个SMTP服务器:localhost:25):

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上显示它们。

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


1
哇,感谢您提供如此全面的答案。我已经让邮件捕获器成功捕获了邮件,但是实际上没有任何邮件出现在我的收件箱中。我尝试了两个不同的电子邮件地址,并检查了两者的垃圾邮件文件夹。这里可能有什么我忽略的问题吗?(我处于开发模式)。 - jyli7
2
在开发过程中,您不需要实际将电子邮件发送到地址。Mailcatcher在http://localhost:1080/上有一个Web界面,您可以打开并查看捕获的电子邮件 - 这就是它的目的,在开发中使其变得简单。然而,在生产中,您希望使用真正的SMTP服务器(Google Apps、qmail、postfix等与您的系统管理员交谈)。 - clyfe
3
别忘了重新启动你的服务器! - Matt Bond
10
Devise 2.0不再提供迁移助手,因此t.confirmable会出现错误。相反,请从他们的迁移指南中复制标记为“Confirmable”的区块:https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style#after - Ross Allen
1
非常棒的教程...感谢分享..+1..同时也值得一看如何:为用户添加:confirmable页面。 - Arup Rakshit
显示剩余4条评论

7
我认为你应该再编辑一次...端口号应该加上引号,像这样:
:port => "587",

我在Rails 3.2.0 / Ruby 1.9.2中遇到了一个问题。


如果使用mailcatcher,则返回“1025”。否则返回Correct。 - Etienne

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接