2013-08-03 2 views
3

Я использую ActionMailer для отправки электронного письма с моего сайта, размещенного на Heroku. Он работал отлично, когда я вводил свое имя пользователя и пароль как строки в smtp_settings, но это, очевидно, недостаток безопасности, так как они на Github для всех, чтобы видеть. Поэтому сегодня я сменил свой пароль gmail и использовал конфигурацию Heroku для сохранения имени пользователя и пароля. Мои настройки SMTP выглядеть следующим образом:Имя пользователя и пароль не принимаются при отправке почты (Heroku)

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings ={ 
    address: "smtp.gmail.com", 
    port: 587, 
    domain: "gmail.com", 
    user_name: "#{ENV['EMAIL_USER']}", 
    password: "#{ENV['EMAIL_PASS']}", 
    authentication: "plain", 
    enable_starttls_auto: true 
} 

Только каждый раз, когда я пытаюсь отправить почту, она дает мне «Net :: SMTPAuthenticationError (535-5.7.8 имя пользователя и пароль не принимаются» ошибки Я даже добавил путы. чтобы показать значения параметров конфигурации в консоли:.

puts "USERNAME : #{ENV['EMAIL_USER']}" 
puts "PASSWORD : #{ENV['EMAIL_PASS']}" 

и в журналах Heroku в они вышли прекрасно, я прочитал другую почту о Gmail блокирует вход из-за подозрительной активности, но у меня не было никакой такой Это просто не работает, когда я использую переменные config - меняя его обратно на строки, он работал над моей локальной средой разработки. Я немного в убытке. ДЕКАК?

+0

Вы можете вставлять свои журналы heroku – Shrikant1712

ответ

1

У меня было сообщение об ошибке SMTPAUTH вы показываете, и у меня есть несколько предложений:

Первый - вот конфиг, который работает для меня на моей производственной программе:

config.action_mailer.default_url_options = { :host => 'WWW.MYDOMAIN.COM' } 
    config.action_mailer.raise_delivery_errors = true; 
    config.action_mailer.delivery_method = :smtp 

    config.action_mailer.smtp_settings = { 
    :address => "smtp.gmail.com", 
    :port => 587, 
    :domain => "MYDOMAIN.COM", 
    :user_name => ENV["MAILER_USER_NAME"], 
    :password => ENV["MAILER_PASSWORD"], 
    :from => '[email protected]', 
    :authentication => 'plain', 
    :enable_starttls_auto => true 
} 

Все материалы MYDOMAIN являются моими фактическими полномочиями.

Второе - Дело в том, что бросил меня было использование лексем, которые были истолковать по Linux, как команды BASH - так вот пример, пароль:

ANEXAMPLEPA$$0RD 

Теперь, когда вы экспортируете это, либо на Heroku или собственный терминал UNIX - вы должны окружать пароль с одинарными кавычками буквально интерпретировать строку следующим образом:

'ANEXAMPLEPA$$0RD' 

Если вы не сделаете этого - пароля, который вы печатаете с экспортом PASSWORD = PWD или Heroku конфигурацией : добавьте KEY = VALUE, фактически сбросит некоторые из ese (UNIX занимает $ 1 и $ 2 и т. д. в качестве заполнителей для переменных при цепочке команд - это оказалось моей проблемой).

Поэтому убедитесь, что если вы используете пароль, который, по вашему мнению, является сильным, что любая комбинация пароля не будет случайно интерпретирована как команда уровня UNIX. Оба экспортируют FOO = BAR и конфигурацию heroku: добавьте FOO = BAR вернется без ошибок, и вы подумаете, что ваш пароль установлен правильно. Затем через час вы проверите, чтобы убедиться, что пароль правильный, и вы заметите, что произошла интерполяция.

В-третьих, вопреки многим сообщениям о SO и личным блогам о: domain => ключе, который не нужен и даже на самом деле способствует отправке сбоев, я нахожу, что он отлично работает с этим элементом.

Смежные вопросы