Соединение отказано - подключите (2) к порту "localhost" 25 рельсов
Во время обучения я работаю над сайтом, и мы используем Ruby on Rails. Нам нужно отправлять письма пользователям, поэтому я создал почтовую программу.
Я попытался поместить smtp в development.rb
и environment.rb
config.action_mailer.default_url_options = {host: '0.0.0.0:3000'}
config.action_mailer.default charset: 'utf-8'
config.action_mailer.delivery_method = 'smtp'
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
adress: $SMTP_SERVER,
port: $PORT,
from: $MAIL,
enable_starttls_auto: true
#authentication: 'login'
}
Это говорит мне, что ошибка исходит из этой линии метода 6
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
# Tell the UserMailer to send a welcome Email after save
UserMailer.welcome_email(@user).deliver_now
format.html { redirect_to(@user, :notice => 'User was successfully created.') }
format.json { render :json => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.json { render :json => @user.errors, :status => :unprocessable_entity }
end
end
end
Я установил порт на 587
но я продолжаю получать ошибку:
Errno :: ECONNREFUSED: соединение отклонено - подключение (2) для порта "localhost" 25
Похоже, что другой файл перезаписывал мои настройки. Я также видел, что это может быть связано с тем, что мой ssh-ключ не разрешен сервером.
Знаете, что не так?
заранее спасибо
Ответы
Ответ 1
Прежде всего, при разработке на локальном хосте, обычно не отправлять почту, а рассматривать это как деталь развертывания и придерживаться поведения по умолчанию Rails, которое должно выплевывать заголовки и содержимое почты в консоли STDOUT (где вы может проверить, что текст выглядит правильно). Есть ли конкретная причина, по которой вам нужно проверить отправку сообщений в среде dev?
Во-вторых, вы упомянули, что вы устанавливаете параметры SMTP как в development.rb, так и в environment.rb. Вам не нужно устанавливать эти настройки дважды; в общем, я бы использовал development.rb
для параметров, специфичных для среды dev, и environment.rb
только для параметров, которые всегда будут применяться ко всем средам (dev, tests и live-серверу). Поэтому, если вы устанавливаете одинаковые настройки в файлах development.rb и environment.rb, я бы начал с удаления одного или другого; избыточность будет только упрощать вашу работу в будущем.
Наконец, чтобы устранить эту проблему, я начал с того, что попросил Rails, что его настройки, а не ждет, чтобы доставка почты завершилась неудачей. Попробуйте следующее:
- Запуск
rails console
- Введите
Rails.configuration.action_mailer.smtp_settings
и сравните полученный хэш с вашими ожиданиями. Этот хэш должен содержать параметры порта и домена, которые используются при отправке всей почты (в текущей среде), поэтому, если ActionMailer пытается использовать неправильный порт, я бы предположил, что порт тоже ошибается.
Где вы устанавливаете $SMTP_SERVER
, $PORT
и $MAIL
? Есть ли причина, по которой вы не используете соглашение Rails для переменных среды, ENV['SMTP_SERVER']
и т.д.?
Надеюсь, что это помогает. Удачи!
Ответ 2
замещать
config.action_mailer.delivery_method = 'smtp'
с
config.action_mailer.delivery_method = :smtp
Убедитесь, что ваши Rails.configuration.action_mailer.smtp_settings являются символами
Ответ 3
MailCatcher - лучшее решение
MailCatcher запускает супер простой SMTP-сервер, который перехватывает любое отправленное ему сообщение для отображения в веб-интерфейсе. Запустите mailcatcher, установите ваше любимое приложение для доставки по адресу smtp://127.0.0.1:1025 вместо SMTP-сервера по умолчанию, а затем проверьте http://127.0.0.1:1080, чтобы увидеть почту.
http://blog.remarkablelabs.com/2013/01/mailcatcher-making-working-with-email-in-development-mode-a-pleasure
Ответ 4
Я сталкивался с этой проблемой при запуске Sidekiq::Worker.drain_all
в моих тестах RSpec, и это config.action_mailer.delivery_method = :test
меня с ума, потому что у меня был config.action_mailer.delivery_method = :test
в моем config/environments/test.rb
Решением было установить config.action_mailer.delivery_method = :test
в моем config/environments/development.rb
, что сбивает с толку, поскольку подразумевается, что мой config/environments/development.rb
переопределяет мой config/environments/test.rb
в мои тесты RSpec.
Независимо от этого, это может решить проблему для других.
Ответ 5
Приложение может использовать gem mailcatcher
для всех исходящих писем в процессе разработки, которые вы не установили или не запустили. По крайней мере, это была моя проблема. Проверьте https://mailcatcher.me и следуйте инструкциям.
Ответ 6
Вам нужно удалить config.action_mailer.perform_deliveries = true
.