Проблемы с отправкой sendgrid / электронной почты в Ruby on Rails (размещены на Heroku)

У меня проблема с получением sendgrid для успешной отправки писем в приложении rails 3.1, которое использует authlogic для аутентификации и развертывается на heroku. У меня есть следующая конфигурация почтовой программы действий в config / environment / [development.rb и production.rb]:

config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.default_charset = "utf-8"
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :domain => ENV['SENDGRID_DOMAIN'],
  :user_name =>  ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
  :authentication => 'plain',
  :enable_starttls_auto => true
}

для production.rb приведенный выше код такой же, за исключением


    config.action_mailer.default_url_options = { :host => [app name in heroku] }

когда я запускаю его в режиме разработки, я получаю следующую ошибку:


    Completed 500 Internal Server Error in 21740ms
    Net::SMTPFatalError (550 Cannot receive from specified address notification@[app-domain]: Unauthenticated senders not allowed
):

Теперь я действительно не знаю, как настроить его, чтобы он работал. Кто-нибудь, у кого есть опыт настройки sendgrid на heroku и rails, знает, что происходит?

Спасибо большое. ребята вы лучшие !!!


person Ringo Blancke    schedule 08.01.2012    source источник


Ответы (3)


Я потратил на это полдня и наконец заставил свою работать. Довольно разочарован, так как это было из-за плохой ошибки в документации. Кстати, я использую Rails 3.1 и Cedar stack на Heroku.

Итак, http://devcenter.heroku.com/articles/sendgrid скажет вам разместить свой SMTP настройки в config / initializers / mail.rb. НО ... на http://docs.sendgrid.com/documentation/get-started/integrate/examples/rails-example-using-smtp/ говорит, что нужно поместить все ваши настройки SMTP в config / environment.rb вместо config / initializers. /mail.rb

Таким образом, решение состоит в том, чтобы поместить это в свой файл environment.rb. Вот как выглядит мой environment.rb:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
Freelanceful::Application.initialize!

# Configuration for using SendGrid on Heroku
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :user_name => "yourSendGridusernameyougetfromheroku",
  :password => "yourSendGridpasswordyougetfromheroku",
  :domain => "staging.freelanceful.com",
  :address => "smtp.sendgrid.net",
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
}

Чтобы получить имя пользователя и пароль SendGrid, введите

$ heroku config -long

Надеюсь, что это поможет .. и еще больше людей в будущем от этой головной боли.

person James F    schedule 10.01.2012
comment
Не знаю почему, но пришлось настроить в mail.rb. staging.rb у меня не работал. Я использую Rails 3.1 + Cedar stack на Heroku + Devise 2.0 + sendgrid. - person Junichi Ito; 29.03.2012
comment
Извини, это была моя ошибка. Это была проблема конфигурации. RACK_ENV и RAILS_ENV в Heroku были производственными, но я отредактировал config / environment / staging.rb. - person Junichi Ito; 31.03.2012
comment
Во-первых, не используйте пароль и имя пользователя напрямую. Используйте переменные env, вот для чего они нужны. Во-вторых: инициализатор или файл env не имеет значения. Файлы среды в конечном итоге загружают файлы инициализатора. Именование тоже не имеет значения. - person krainboltgreene; 12.07.2012
comment
У меня тоже была эта проблема, благодаря документации Heroku. Однако вы можете оставить свои настройки SMTP в config/initializers/mail.rb, если вы не укажете ActionMailer::Base.delivery_method = :smtp в mail.rb. - person jmdeldin; 14.07.2012
comment
И не забудьте установить переменные окружения на Heroku, как это сделал я. Конфигурация heroku: добавить SENDGRID_USERNAME = foo и конфигурацию heroku: добавить SENDGRID_PASSWORD = bar - person seanmrafferty; 01.11.2012
comment
Я установил smtp_settings в production.rb, но тестировал в staging (RAILS_ENV). Итак, как только я скопировал настройку на staging.rb, письмо было отправлено. Тьфу моя плохая! - person user664833; 26.05.2013
comment
devcenter.heroku.com/articles/sendgrid в поле домена указано, что heroku.com это будет домен приложения или героку? - person Harry Moreno; 19.06.2013
comment
почтовая программа работает у меня на стадии подготовки, где настройки smtp находятся в config/initializers/mail.rb, но то же самое не работает в производственной среде !! Не знаю почему - person nish; 14.11.2013

Я предполагаю, что вы имеете в виду режим разработки как локально? Если это так, я не думаю, что надстройка SendGrid позволяет отправлять электронную почту из-за пределов сети Heroku (поскольку у них есть автономные учетные записи, которые они бы предпочли использовать).

При этом вам не нужно настраивать почту в производственной среде при использовании надстройки SendGrid, поскольку она настраивается автоматически при развертывании приложения.

Поэтому вы можете удалить свой config.action_mailer.smtp_settings код и просто использовать код по умолчанию при разработке.

person Neil Middleton    schedule 08.01.2012
comment
ну, я закомментировал smtp_settings в production.rb, и в соответствии с журналами heroku я получил ошибку отказа в соединении. Errno :: ECONNREFUSED (Соединение отклонено - соединение (2)): следует ли мне включить sendgrid в качестве драгоценного камня в Gemfile? - person Ringo Blancke; 09.01.2012
comment
Нет, вам просто нужно добавить надстройку к приложению, а затем выполнить развертывание. - person Neil Middleton; 09.01.2012
comment
@NeilMiddleton В документации Heroku говорится, что вы должны добавить smtp_settings в стек Cedar. Если это осина или бамбук, вы можете оставить ее в покое. Использование Sendgrid на Heroku - person Pete; 18.01.2012

Также обратите внимание, что если вы запускаете приложение Heroku в стеке Bamboo, вам не нужно настраивать параметры в файле environment.rb, поскольку Heroku делает это за вас.

Однако вам нужно хотя бы один раз нажать git push после того, как вы активировали приложение на Heroku, чтобы установить эти настройки. Я допустил эту ошибку сегодня утром и нашел ваш пост.

person Alextoul    schedule 15.07.2013