使用MailCatcher和Devisegem的Rails 4

我有一个与gemDevise的应用程序。 我需要通过电子邮件确认注册。 在config / environment.rb中我添加了这个

ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :domain => "gmail.com", :authentication => 'plain', :user_name => "myappname@gmail.com", :password => "mypassword" } 

config / environment / development.rb中添加:

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

我希望通过gem MailCatcher捕获所有电子邮件但是当我提交发送确认指令时,mailcatcher gem中没有任何反应。 但在控制台我有类似的东西:

 Sent mail to abc@mail.ru (3757.4ms) Date: Thu, 21 Nov 2013 01:19:45 +0400 From: metahall.app@egmail.com Reply-To: metahall.app@egmail.com To: abc@mail.ru Message-ID:  Subject: Confirmation instructions Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit 

Welcome abc@mail.ru!

You can confirm your account email through the link below:

Confirm my account

Redirected to http://localhost:3000/users/sign_in Completed 302 Found in 4648ms (ActiveRecord: 59.8ms)

并且在mailcathcer中没有任何东西。 怎么了?

这也发生在我身上。 我跟着这些awnser 如何设置Devise的电子邮件确认? 。 结果是我忘了在设计迁移中取消注释confirm_token外键。 之后,我放弃并重新创建数据库并且工作正常!

因此,当您生成设计模型时,它会创建以下迁移,并具有相应的范围。

 class DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.inet :current_sign_in_ip t.inet :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end 

要激活确认function,您必须取消注释以下块:

  ## Confirmable t.string :confirmation_token t.datetime :confirmed_at t.datetime :confirmation_sent_at t.string :unconfirmed_email # Only if using reconfirmable 

 add_index :users, :confirmation_token, unique: true 

这应该使电子邮件出现在MailCatcher中。

好运 :)