Reputation: 269
Following a tutorial where I am adding user authentication to a basic rails app.
There is a step where I have to add the following code to a setup_mail.rb
file
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
I have added the sendgrid addon, and put user id and password on the application.yml file as well.
But when I sign up, I do not receive a confirmation mail.
cross checked the development.rb
file as well and made sure the following code was present
....
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
end
Followed the tutorial word to word. Hence really stumped! Google pointed me to a few places and confused me futher!
This is how my migration db file looks like at the moment
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
Here is my user.rb file as well
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
These are the steps I followed in order
bundle
rails g devise:install
rails g devise:views
rails g devise User
confirmable
in the migration file`rake db:migrate
:confirmable
to the User class in user.rbheroku addons:add sendgrid:starter
heroku congif:get SENDGRID_USERNAME
heroku config:get SENDGRID_PASSWORD
Update
Added mail settings in development.rb as well, no luck.
Tried changing the domain from domain: 'heroku.com'
to domain: 'sendgrid.com'
, no luck.
Here is the server log. It appears that the mail has been sent but I cannot find it in the inbox or spam
Sent mail to [email protected] (2070.9ms)
Date: Wed, 07 Jan 2015 13:52:05 +0000
From: [email protected]
Reply-To: [email protected]
To: myemailgmail.com
Message-ID: <[email protected]>
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)
Upvotes: 1
Views: 2469
Reputation: 531
In development setup, by default mails are not sent
we can enable by setting config.action_mailer.perform_deliveries = true
if it is still not solved ,we can set
config.action_mailer.raise_delivery_errors = true
and we can find the exact issue printed in console
Upvotes: 0
Reputation: 3393
In my case, i was using my gmail account with localhost environment, when i check my mail, i show a mail from google saying "Sign-in attempt was blocked" due to "Less secure app blocked" , you can enable it need to follow instruction as received in mail link
Upvotes: 0
Reputation: 1
I ran into the same problem with :confirmable
. I was not able to get the email to send, but I was able to trick the app into thinking that it had been sent and confirmed - and therefore login.
In the console:
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
Upvotes: 0
Reputation: 101
Check to make sure Sendgrid doesn't have your account on hold. Log in through your Heroku dashboard. Then click on your app. Then under addons, click on Sendgrid. This will take you to their dashboard. If there is a warning saying that your account is on hold pending review, you'll have to contact them and have them remove it.
Upvotes: 5
Reputation: 10063
In mail_setup.rb, try changing the first line to:
if Rails.env.development? || Rails.env.production?
Upvotes: 0
Reputation: 10015
You are running it for development mode. Mails are formed and can be seen in logs but not delivered. They will not be sent in dev mode by default.To enable, use this in development.rb
config.action_mailer.perform_deliveries = true
use the below code in 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 }
}
Upvotes: 2