Отказ в соединении - 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, но стоит попробовать.