Проблемы отправки Sendgrid/электронной почты в Ruby on Rails (размещены на Heroku)
im с проблемой получения 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 [email protected][app-domain]: Unauthenticated senders not allowed
):
Теперь я действительно не знаю, как настроить его, чтобы заставить его работать. кто-нибудь с некоторым предыдущим опытом по настройке sendgrid на героку и рельсах знает, что происходит?
Большое вам спасибо. вы, ребята, самые лучшие!!!
Ответы
Ответ 1
Я потратил полчаса на это и, наконец, получил свою работу сейчас. Очень расстроен, поскольку это было связано с плохой ошибкой документации. Кстати, я запускаю Rails 3.1 и Cedar stack на Heroku.
Итак http://devcenter.heroku.com/articles/sendgrid расскажет вам о том, чтобы поместить ваши настройки SMTP в config/initializers/mail.rb. BUT... на http://docs.sendgrid.com/documentation/get-started/integrate/examples/rails-example-using-smtp/ говорится, что все ваши настройки SMTP можно добавить в config/environment.rb вместо config/initializers/mail.rb
Итак, решение заключается в том, чтобы поместить это в файл environment.rb. Вот как выглядит моя среда .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
Надеюсь, что это поможет... и больше людей в будущем этой головной боли.
Ответ 2
Я предполагаю, что вы имеете в виду режим разработки, как на местном уровне? Если это так, я не думаю, что надстройка SendGrid позволяет отправлять электронную почту за пределами сети Heroku (поскольку у них есть автономные учетные записи, которые они предпочли бы использовать).
Сказав, что вам не нужно настраивать почту в процессе производства при использовании надстройки SendGrid, поскольку она автоматически настраивается для вас при развертывании вашего приложения.
Поэтому вы можете удалить свой код config.action_mailer.smtp_settings
и просто использовать по умолчанию в разработке.
Ответ 3
Также обратите внимание, что если вы используете приложение Heroku в стеке Bamboo, вам не нужно настраивать свои настройки в файле environment.rb, поскольку Heroku делает это за вас.
Однако вам нужно git нажать хотя бы один раз после того, как вы активировали приложение в Heroku, чтобы установить эти параметры. Сегодня утром я совершил эту ошибку и нашел ваш пост.