veryrarecandy
veryrarecandy

Reputation: 333

Why are my Authentication Emails not working? I get an "AuthenticationError"

Whenever I reset my password or attempt to get an email confirmation I see this sort of error page:

Net::SMTPAuthenticationError in Devise::PasswordsController#create

It looks like the email is sending as I see this in my Rails Server logs, however at the bottom of it you can see I get some sort of 500 error.

This only happens when I'm sending email authentication from development (I've included my development.rb file below). Seems to be working fine on Heroku.

I've included my email logins on a separate .env file so you don't see it here and I've changed my email address in these logs for privacy.

Any help is appreciated!

Rails Server Logs:

(0.9ms)  commit transaction
  Rendered devise/mailer/confirmation_instructions.html.erb (1.1ms)

Sent mail to [email protected] (958.0ms)
Date: Wed, 23 Apr 2014 10:51:46 -0700
From: [email protected]
Reply-To: [email protected]
To: [email protected]
Message-ID: <[email protected]>
Subject: Confirmation instructions
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<p>Welcome [email protected]!</p>

<p>You can confirm your account email through the link below:</p>

<p><a href="http://localhost:3000/users/confirmation?confirmation_token=ukG1PXbXyXP5LpjG1Eaa">Confirm my account</a></p>

Completed 500 Internal Server Error in 964ms

Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at
):
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/smtp.rb:948:in `check_response'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/smtp.rb:917:in `getok'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/smtp.rb:832:in `mailfrom'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/smtp.rb:659:in `send_message'
  mail (2.5.4) lib/mail/network/delivery_methods/smtp.rb:113:in `block in deliver!'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/smtp.rb:520:in `start'
  mail (2.5.4) lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
  mail (2.5.4) lib/mail/message.rb:2129:in `do_delivery'
  mail (2.5.4) lib/mail/message.rb:232:in `block in deliver'
  actionmailer (4.0.0) lib/action_mailer/base.rb:456:in `block in deliver_mail'
  activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument'
  actionmailer (4.0.0) lib/action_mailer/base.rb:454:in `deliver_mail'
  mail (2.5.4) lib/mail/message.rb:232:in `deliver'
  devise (3.2.4) lib/devise/models/authenticatable.rb:173:in `send_devise_notification'
  devise (3.2.4) lib/devise/models/confirmable.rb:102:in `send_confirmation_instructions'
  devise (3.2.4) lib/devise/models/confirmable.rb:117:in `block in resend_confirmation_instructions'
  devise (3.2.4) lib/devise/models/confirmable.rb:211:in `pending_any_confirmation'
  devise (3.2.4) lib/devise/models/confirmable.rb:116:in `resend_confirmation_instructions'
  devise (3.2.4) lib/devise/models/confirmable.rb:265:in `send_confirmation_instructions'
  devise (3.2.4) app/controllers/devise/confirmations_controller.rb:9:in `create'
  actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
  actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  activesupport (4.0.0) lib/active_support/callbacks.rb:423:in `_run__3176473197347058618__process_action__callbacks'
  activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
  actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
  activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument'
  actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
  activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process'
  actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process'
  actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch'
  actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action'
  actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
  actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
  actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
  actionpack (4.0.0) lib/action_dispatch/routing/mapper.rb:44:in `call'
  actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
  actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `catch'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  rack (1.5.2) lib/rack/etag.rb:23:in `call'
  rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
  rack (1.5.2) lib/rack/head.rb:11:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
  rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
  activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
  activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
  activerecord (4.0.0) lib/active_record/migration.rb:369:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__455108311755261639__call__callbacks'
  activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
  actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
  railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
  railties (4.0.0) lib/rails/engine.rb:511:in `call'
  railties (4.0.0) lib/rails/application.rb:97:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  rack (1.5.2) lib/rack/content_length.rb:14:in `call'
  rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'


  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.9ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.0ms)

development.rb :

Yoshirt::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Defining default url options for devise
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

  # Change to true to allow email to be sent during development
  # http://stackoverflow.com/questions/21610815/how-to-config-devise-gem-to-send-email-to-the-resource
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "mail.google.com",####important
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: ENV["GMAIL_USERNAME"],
    password: ENV["GMAIL_PASSWORD"]
  }

end

Upvotes: 4

Views: 4341

Answers (4)

Paul Brunache
Paul Brunache

Reputation: 625

For people who find this post and none of the above worked, FYI the development.rb where the mail settings are located loads pretty early in the initialization process for rails.

My fix:

I created a environment_variables.yml in the config directory and added my variables there. I also added this tidbit of code to the application.rb because the application.rb loads before the development.rb.

config.before_configuration do
        env_file = Rails.root.join("config", 'environment_variables.yml').to_s
        if File.exists?(env_file)
          YAML.load_file(env_file)[Rails.env].each do |key, value|
            ENV[key.to_s] = value
          end # end YAML.load_file
        end # end if File.exists?
    end # end config.before_configuration

Upvotes: 0

Jon
Jon

Reputation: 55

You can change security of Gmail and activate authorization for the less safe apps in Google's settings here.

Upvotes: 2

Kirti Thorat
Kirti Thorat

Reputation: 53048

As per the chat session with OP, GMAIL_USERNAME and GMAIL_PASSWORD were not being picked up from .env which was resulting in this error.

Hardcoding the user_name and password in development.rb works perfectly.

I would highly recommend you to go for figaro gem which is an excellent way to securely configure Rails applications.

Also, read this excellent article by Daniel Kehoe and Taylor Mock on Rails Environment Variables. You would also get an idea on how to use figaro gem in your application.

Upvotes: 9

Nick Veys
Nick Veys

Reputation: 23949

You followed this, or something like it, it looks like your configuration is fine.

So either your username/password is wrong, or maybe you didn't restart the server after you made those configuration changes? Is there nothing more to that error message?

Upvotes: 0

Related Questions