使用设备未收到确认邮件
Not receiving confirmation mail with devise
按照我将用户身份验证添加到基本 rails 应用程序的教程。
有一个步骤,我必须将以下代码添加到 setup_mail.rb
文件
if Rails.env.development?
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'smtp.sendgrid.net',
port: '587',
authentication: :plain,
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: 'heroku.com',
enable_starttls_auto: true
}
end
我添加了 sendgrid 插件,并将用户 ID 和密码也放在 application.yml 文件中。
但是当我注册时,我没有收到确认邮件。
也交叉检查了 development.rb
文件并确保存在以下代码
....
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
end
逐字按照教程进行。所以真的难倒了! Google 指出了几个地方,让我更加困惑!
这就是我的迁移数据库文件目前的样子
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Customization
t.string :name
## 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.string :current_sign_in_ip
t.string :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
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
这也是我的 user.rb 文件
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
end
这些是我按顺序执行的步骤
- 已安装 devise gem,运行
bundle
rails g devise:install
- 将以上代码添加到 development.rb 文件
rails g devise:views
rails g devise User
- 在迁移文件中取消注释
confirmable
`
rake db:migrate
- 在 user.rb
中向用户 class 添加了 :confirmable
heroku addons:add sendgrid:starter
heroku congif:get SENDGRID_USERNAME
heroku config:get SENDGRID_PASSWORD
- 创建了 config/initializers/setup_mail.rb 并添加了上述邮件设置。
- 已安装 figaro。
- 已将环境变量添加到 application.yml 文件
- `figaro heroku:set -e 生产
更新
也在 development.rb 中添加了邮件设置,但没有成功。
尝试将域从 domain: 'heroku.com'
更改为 domain: 'sendgrid.com'
,但没有成功。
这是服务器日志。邮件似乎已发送,但我在收件箱或垃圾邮件中找不到它
Sent mail to myemail@gmail.com (2070.9ms)
Date: Wed, 07 Jan 2015 13:52:05 +0000
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: myemailgmail.com
Message-ID: <54ad3a05d2b29_1ba3fb59082841433253@bloc-ruby-179559.mail>
Subject: Confirmation instructions
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<p>Welcome !</p>
<p>You can confirm your account email through the link below:</p>
<p><a href="http://localhost:3000/users/confirmation? confirmation_token=W3xuYfA8aq2obMBmffghfghQaDt">Confirm my account</a></p>
(45.0ms) commit transaction
Redirected to http://bloc-ruby-179559.apse1.nitrousbox.com/
Completed 302 Found in 2872ms (ActiveRecord: 46.4ms)
你是运行它的开发模式。邮件已形成并可以在日志中看到但未送达。 default.To 启用后它们不会在开发模式下发送,请在 development.rb
中使用它
config.action_mailer.perform_deliveries = true
在config/environments/development.rb
中使用下面的代码
config.action_mailer.smtp_settings = {
:address => "smtp.sendgrid.net",
:port => 587,
:domain => "sendgrid.com",
:user_name => ""
:password => ""
:authentication => 'plain',
:enable_starttls_auto => true }
}
在 mail_setup.rb 中,尝试将第一行更改为:
if Rails.env.development? || Rails.env.production?
检查以确保 Sendgrid 没有暂停您的帐户。通过您的 Heroku 仪表板登录。然后单击您的应用程序。然后在插件下,单击 Sendgrid。这将带您到他们的仪表板。如果有一条警告说您的帐户处于暂停状态,等待审核,您必须联系他们并让他们将其删除。
我 运行 遇到了与 :confirmable
相同的问题。我无法获得要发送的电子邮件,但我能够欺骗该应用程序认为它已发送并得到确认 - 因此可以登录。
在控制台中:
User.find(1).confirm # returns true unless it's already confirmed
User.find(1).confirmed? # true/false
User.find(1).send_confirmation_instructions # manually send instructions
在我的例子中,我在本地主机环境中使用我的 gmail 帐户,当我检查我的邮件时,我显示一封来自 google 的邮件说 "Sign-in attempt was blocked" 由于 "Less secure app blocked",你可以启用它需要遵循 mail link
中收到的说明
在开发设置中,默认情况下不发送邮件
我们可以通过设置启用
config.action_mailer.perform_deliveries = 真
如果还没有解决,我们可以设置
config.action_mailer.raise_delivery_errors = 真
我们可以在控制台中找到确切的问题
按照我将用户身份验证添加到基本 rails 应用程序的教程。
有一个步骤,我必须将以下代码添加到 setup_mail.rb
文件
if Rails.env.development?
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'smtp.sendgrid.net',
port: '587',
authentication: :plain,
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: 'heroku.com',
enable_starttls_auto: true
}
end
我添加了 sendgrid 插件,并将用户 ID 和密码也放在 application.yml 文件中。
但是当我注册时,我没有收到确认邮件。
也交叉检查了 development.rb
文件并确保存在以下代码
....
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
end
逐字按照教程进行。所以真的难倒了! Google 指出了几个地方,让我更加困惑!
这就是我的迁移数据库文件目前的样子
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Customization
t.string :name
## 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.string :current_sign_in_ip
t.string :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
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
这也是我的 user.rb 文件
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
end
这些是我按顺序执行的步骤
- 已安装 devise gem,运行
bundle
rails g devise:install
- 将以上代码添加到 development.rb 文件
rails g devise:views
rails g devise User
- 在迁移文件中取消注释
confirmable
` rake db:migrate
- 在 user.rb 中向用户 class 添加了
heroku addons:add sendgrid:starter
heroku congif:get SENDGRID_USERNAME
heroku config:get SENDGRID_PASSWORD
- 创建了 config/initializers/setup_mail.rb 并添加了上述邮件设置。
- 已安装 figaro。
- 已将环境变量添加到 application.yml 文件
- `figaro heroku:set -e 生产
:confirmable
更新
也在 development.rb 中添加了邮件设置,但没有成功。
尝试将域从 domain: 'heroku.com'
更改为 domain: 'sendgrid.com'
,但没有成功。
这是服务器日志。邮件似乎已发送,但我在收件箱或垃圾邮件中找不到它
Sent mail to myemail@gmail.com (2070.9ms)
Date: Wed, 07 Jan 2015 13:52:05 +0000
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: myemailgmail.com
Message-ID: <54ad3a05d2b29_1ba3fb59082841433253@bloc-ruby-179559.mail>
Subject: Confirmation instructions
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<p>Welcome !</p>
<p>You can confirm your account email through the link below:</p>
<p><a href="http://localhost:3000/users/confirmation? confirmation_token=W3xuYfA8aq2obMBmffghfghQaDt">Confirm my account</a></p>
(45.0ms) commit transaction
Redirected to http://bloc-ruby-179559.apse1.nitrousbox.com/
Completed 302 Found in 2872ms (ActiveRecord: 46.4ms)
你是运行它的开发模式。邮件已形成并可以在日志中看到但未送达。 default.To 启用后它们不会在开发模式下发送,请在 development.rb
中使用它config.action_mailer.perform_deliveries = true
在config/environments/development.rb
中使用下面的代码config.action_mailer.smtp_settings = {
:address => "smtp.sendgrid.net",
:port => 587,
:domain => "sendgrid.com",
:user_name => ""
:password => ""
:authentication => 'plain',
:enable_starttls_auto => true }
}
在 mail_setup.rb 中,尝试将第一行更改为:
if Rails.env.development? || Rails.env.production?
检查以确保 Sendgrid 没有暂停您的帐户。通过您的 Heroku 仪表板登录。然后单击您的应用程序。然后在插件下,单击 Sendgrid。这将带您到他们的仪表板。如果有一条警告说您的帐户处于暂停状态,等待审核,您必须联系他们并让他们将其删除。
我 运行 遇到了与 :confirmable
相同的问题。我无法获得要发送的电子邮件,但我能够欺骗该应用程序认为它已发送并得到确认 - 因此可以登录。
在控制台中:
User.find(1).confirm # returns true unless it's already confirmed
User.find(1).confirmed? # true/false
User.find(1).send_confirmation_instructions # manually send instructions
在我的例子中,我在本地主机环境中使用我的 gmail 帐户,当我检查我的邮件时,我显示一封来自 google 的邮件说 "Sign-in attempt was blocked" 由于 "Less secure app blocked",你可以启用它需要遵循 mail link
中收到的说明在开发设置中,默认情况下不发送邮件
我们可以通过设置启用 config.action_mailer.perform_deliveries = 真
如果还没有解决,我们可以设置
config.action_mailer.raise_delivery_errors = 真
我们可以在控制台中找到确切的问题