2013-12-25 3 views
37

Почему этот почтовый клиент не отправляет почту? (? Или какие-либо идеи для отладки)ActionMailer не отправляет почту в разработке Rails 4

В my_app/Config/сред/development.rb У меня есть этот код:

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    address:    'smtp.gmail.com', 
    port:     587, 
    domain:    'my_app.com', 
    user_name:   ENV['GMAIL_USERNAME'], 
    password:    ENV['GMAIL_PASSWORD'], 
    authentication:  'plain', 
    enable_starttls_auto: true } 

Тогда на моем локальном компьютере в ~/.bash_profile У меня есть этот код:

export GMAIL_USERNAME='[email protected]_app.com' 
export GMAIL_PASSWORD='***' 

Когда я запустил $ env в моем терминале, я вижу, что обе переменные среды установлены правильно.

Я также перезапустил сервер своих рельсов.

+0

ли работа, как ожидается, в ': test' или': файл'? Это изолировало бы проблему от ваших настроек smtp. –

+5

Возможно, это глупый вопрос: вы изменили config.action_mailer.perform_deliveries = true, поскольку по умолчанию это значение false, предотвращая отправку писем из среды разработки ... – Danny

+0

Не глупо вообще @DannyVanHoof, потому что это было так! Спасибо. –

ответ

94

Вы должны добавить

config.action_mailer.perform_deliveries = true 

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

10

Для тех, кто не использует протокол SMTP, переключая способ доставки в Sendmail помог мне в дополнение к явно устанавливая поставки должны быть выполнены:

config.action_mailer.delivery_method = :sendmail 
+0

sendmail быстрее настраивается на многих серверах. Особенно полезен для режима разработки. – Jerome

+0

Я просто хотел добавить это для меня в Rails 5, переключение на: sendmail было единственной вещью, которая могла бы работать – Dog

6

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

MyMailer.create_email.deliver 
+0

, что утверждение для меня не имеет смысла. вы можете сделать этот вызов в консоли. – dtc

+0

Просто вызов вашего метода на самом деле не доставляет почту, пока в консоли rails. Вам нужно вызвать метод доставки на почтовый объект, возвращаемый вашим методом Mailer. – MichaelBrawn

+0

моя ошибка, я не знал, что существует метод create_email, но в последних рельсах (и какое-то время я предположил), 'MyMailer.deliver' должно быть достаточно. и вы можете сделать это либо в консоли, либо в приложении – dtc

0

Так что я понял это. Наличие строки ActionMailer::Base.delivery_method = :smtp в config/environment.rb переопределяет ActionMailer::Base.delivery_method = :test в config/environments/test.rb.

Итак, удалите эту строку, ActionMailer::Base.delivery_method = :smtp от config/environment.rb и поместите ее в config/environments/production.rb. Это позволяет разместить ActionMailer::Base.delivery_method = :test в config/environments/test.rb и версию, которую вы хотите в config/environments/development.rb. Я сделал development.rb:test, поскольку я заполнил свою базу данных с помощью Faker и изменил ее на :smtp, поэтому я был уверен, что настоящие электронные письма были отправлены в качестве дополнительной проверки.

Примечание. Чтобы эти изменения вступили в силу, необходимо перезагрузить сервер.

Еще одно замечание: текущие SendGrid инструкции Heroku (в https://devcenter.heroku.com/articles/sendgrid) поместить код конфигурации SendGrid Heroku в новом config/initializers/mail.rb файле, который, скорее всего, потребует удаления его последней строки и размещения нужную версию в каждой config/environments/[production.rb, development.rb, test.rb]

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