Где я могу прочитать полное руководство по настройке SMTP для Rails? - PullRequest
1 голос
/ 17 марта 2012

Я новичок в Rails, и у меня есть вопрос.Я устанавливаю простое приложение с плагином Devise, развертываю его на производственном сервере (Ubuntu на Linode, nginx + passenger) через Capistrano.А теперь попробуйте отправить электронные письма (восстановление пароля, подтверждение по электронной почте и т. Д. Из Devise).

Но это все же работает.

У меня есть эти строки в /enviroments/production.rb

  config.action_mailer.default_url_options = { :host => "myhostname.com" }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.raise_delivery_errors = true

И когда я пытаюсь отправить электронное письмо из своего приложения, я получаю сообщение об ошибке 500 «Извините, но что-то пошло не так» (Пассажир).В log / production.log

Net::SMTPServerBusy (451 4.3.0 Temporary system failure. Please try again later.)

я использую exim4 в качестве почтового сервера.Также я пытаюсь установить sendmail и изменить

config.action_mailer.delivery_method = :sendmail

Отправка электронной почты начинается, но приложение работает очень медленно.

Итак, мой вопрос: что мне нужно сделать с моей проблемой и где я могу прочитатьполное руководство или документация по настройке exim4 для работы с приложением rails?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 октября 2012

В соответствии с главами 5 и 5.1 официального документа ActionMailer: http://guides.rubyonrails.org/action_mailer_basics.html

Мы видим, что нет опции ': exim4', доступной как 'delivery_method'.

Так что я быпредложить "обмануть" ActionMailer, что он использует sendmail (хотя он будет использовать exim4).Используйте следующую конфигурацию в вашем файле config / enviroments / production.rb:

config.action_mailer.delivery_method = :sendmail
config.action_mailer.sendmail_settings = {
  :location => '/usr/sbin/exim4',
  :arguments => '-i'
}
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

Аргументы соответствуют следующим параметрам exim4:

  • -t опция причиныполучатели сообщения, которые должны быть получены из строк заголовка To :, Cc: и Bcc: в сообщении, а не из аргументов команды.
  • -i опция запрещает строку, содержащуюпросто точка от завершения сообщения.Только конец файла делает это.

Не используйте опцию -t.

Чтобы правильно настроить свой демон Exim4, я предлагаю этот быстрый практический совет: http://noosfero.org/Development/MailSending

Я настоятельно рекомендую вам выбрать « smarthost » на первом экране вместо «Интернет-сайт».

Это потому, что почтовые провайдеры Интернета (gmail, yahoo и т. д.) по умолчанию блокируют все электронные письма, которые приходят с неизвестных IP-адресов в Интернете (конечно, включая IP-адрес вашего нового сервера).

Если вы выбираете «smarthost»ваш сервер должен будет подключиться к существующему (и доверенному) почтовому серверу (gmail, Yahoo и т. д.), чтобы пересылать свои собственные сообщения электронной почты.Это обеспечит доставку ваших писем к месту назначения.

=== ОБНОВЛЕНИЕ

У меня были проблемы с настройкой его работы с -t optin с некоторых версий rails (3.2).У меня была следующая ошибка в моем / var / www / my_app / log / production.log :

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

Поэтому я удалил опцию -t, так как рельсы больше не включали To: поле в сообщении и скорее отправил его в командной строке.

Я обнаружил, что у другого разработчика возникла похожая проблема в этом приложении: gitlabhq

Я надеюсь, что это поможетлюди, делающие рельсы, работающие с exim4.

0 голосов
/ 01 декабря 2016

Debian 8 + Rails4.2.6 + версия exim 4.84_2

Я добавил в мой config / enviroments / production.rb файл:

config.action_mailer.default_options     = { from: 'mybox@hostname.com' }
config.action_mailer.default_url_options = { host: 'hostname.com' }
config.action_mailer.perform_deliveries    = true
config.action_mailer.raise_delivery_errors = true

и очистить (прокомментировать) из delivery_method и sendmail_settings params:

# config.action_mailer.delivery_method = :sendmail
# config.action_mailer.sendmail_settings = {
#     :location => '/usr/sbin/exim4',
#     :arguments => '-i'
# }

И это работа!

Для меня ответ Дугласа не сработал.

...