Отказ в соединении - ActionMailer с gmail

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25

Это ошибка, которую я получаю, когда пытаюсь отправить электронное письмо с помощью ActionMailer.

Gemfile

source 'https://rubygems.org'


gem 'rails', '4.2.5'
gem 'pg', '~> 0.15'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'high_voltage', '~> 2.4.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'devise'
gem 'figaro'
gem 'faker'
gem 'paperclip', '~> 4.3'
gem 'instagram'
gem 'pundit'
gem 'amazon-ses-mailer'



group :test do
  gem 'simplecov', :require => false, :group => :test
  gem 'factory_girl_rails', :require => false, :group => :test
  gem 'database_cleaner'
  gem 'rspec-rails'
  gem 'capybara'
  gem 'selenium-webdriver'
  gem 'chromedriver-helper'
end

group :development, :test do
  gem 'byebug'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :development do
  gem 'web-console', '~> 2.0'

  gem 'spring'
end

group :production do
  gem 'puma'
end

development.rb

  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "joemarion.io",
    user_name: ENV['gmail_username'],
    password: ENV['gmail_password'],
    authentication: "plain",
    enable_starttls_auto: true
  }

  config.action_mailer.default_url_options = { host: "localhost:3000" }

end

application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  default from: "support@example.com"
  layout 'mailer'
end

contact_mailer.rb

class ContactMailer < ApplicationMailer

  def contact_us(pending_message)
    @message = pending_message

    mail to: "joemarion.io@gmail.com",
        subject: "New message from JoeMarion.io!"
  end
end

Сейчас я ознакомился с парой руководств и продолжаю сталкиваться с этой проблемой. Я видел пару других на SO, у которых есть эта ошибка, но они были из-за неправильных настроек (большинство из которых они устанавливали свои smtp в инициализаторе, но когда они переместили его обратно в разработку, это работало).

Я могу установить соединение с сервером Gmail через командную строку.

В этот момент я начинаю удивляться тому, что мне нужно изменить, чтобы это исправить. Любой совет будет принят во внимание.

РЕДАКТИРОВАТЬ: после запуска:

telnet smtp.gmail.com 587

Trying 64.233.180.109...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 smtp.gmail.com ESMTP u68sm13502513oia.22 - gsmtp

telnet smtp.gmail.com 587

Trying 64.233.180.109

до истечения времени ожидания.

2 ответа

В development.rb добавьте это:

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"

После, попробуйте изменить порт 587 на 25 и запустите:

telnet smtp.gmail.com 587

И посмотреть сообщения, если не работает, поменяй на

telnet smtp.gmail.com 25

И деталь, в разработке:

config.action_mailer.smtp_settings = {
   ...
   domain: "localhost"
}

На производстве нормально использовать домен: "joemarion.io", в разработке я предпочитаю использовать localhost.

Вы можете попытаться снизить уровень безопасности своей учетной записи Google, чтобы узнать, является ли отказ в соединении со стороны Google. Следующая ссылка должна предоставить больше информации:

https://support.google.com/accounts/answer/6010255?hl=en

Я не сталкивался с этой проблемой сам в рельсах, я столкнулся с ней при использовании javamail, но стоит попробовать.

Другие вопросы по тегам