Отправка почты с Rails 3 в среде разработки - PullRequest
54 голосов
/ 30 ноября 2010

Я уверен, что об этом уже миллион раз спрашивали, но я не могу найти ничего подходящего для меня, поэтому я спрашиваю снова!

Мне просто нужен способ отправки писем с помощью ActionMailer вrails 3. Я следовал многочисленным учебникам, включая учебник Railscasts по новому ActionMailer, и я могу видеть, что письма генерируются, но я их не получаю.

Я пробовал несколько разных способов, но обычно их количествочтобы настроить следующие параметры

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => "587",
  :domain               => "gmail.com",
  :user_name            => "xxx@gmail.com",
  :password             => "yyy",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

Я попробовал приведенный выше код (конечно, с действительными подробностями gmail) в моем config / environment.rb, config / environment / development.rb и в настоящее время имею его в своем собственноминициализатор config / initialisers / setup_mail.rb

Я также пробовал использовать несколько разных серверов smtp, включая Gmail и Sendgrid, соответственно изменяя настройки smtp, но ничего не изменив.Я вижу почту в терминале и журнал разработки, и все.

Кто-нибудь знает о каких-то других ошибках, которые я, возможно, пропустил, которые должны быть настроены для работы ActionMailer?В противном случае есть способ получить больше информации о том, почему письма не отправляются?Я установил

config.action_mailer.raise_delivery_errors = true

в моем config / development.rb, но журнал разработки по-прежнему показывает то же самое, что я вижу в терминале.

Для чего это стоит, я занимаюсь разработкой наноутбук Ubuntu 10.04 на всякий случай, если для этого нужны какие-то особые настройки.

Большое спасибо

Ответы [ 8 ]

55 голосов
/ 07 декабря 2010

Ну, я решил проблему, но вполне понятно, почему это работает, а другие методы - нет, я не знаю.

Решением было создание инициализатора в config / initialisers / setup_mail.rb, содержащего следующее

if Rails.env != 'test'
  email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
  ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end

Затем я добавил config / email.yml, содержащий подробную информацию об учетных записях разработчиков и рабочей почты

development:
  :address: smtp.gmail.com
  :port: 587
  :authentication: plain
  :user_name: xxx
  :password: yyy
  :enable_starttls_auto: true
production:
  :address: smtp.gmail.com
  :port: 587
  :authentication: plain
  :user_name: xxx
  :password: yyy
  :enable_starttls_auto: true

Как я уже сказал, понятия не имею почему, но, похоже, это сработало. Спасибо всем за указатели

27 голосов
/ 30 ноября 2010

У меня есть следующее в config/environments/development.rb

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true

Фактическая конфигурация почты, config.actionmailer.* я поместил в config\application.rb.

Надеюсь, это поможет:)

6 голосов
/ 30 ноября 2010

Попробуйте использовать 'sendmail' вместо 'smtp'.

ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
  :address              => "smtp.gmail.com",
  :port                 => "587",
  :domain               => "gmail.com",
  :user_name            => "xxx@gmail.com",
  :password             => "yyy",
  :authentication       => "plain",
  :enable_starttls_auto => true
}
3 голосов
/ 30 мая 2011

Три вещи.

Во-первых, порт является целым числом и не нуждается в кавычках, как в первом примере.(Но я думаю, что строка все еще должна работать.)

Во-вторых, не забывайте перезагружать сервер каждый раз, когда вы изменяете этот (или любой) файл инициализатора.Это может объяснить, почему вы не увидели ошибку после добавления:

config.action_mailer.raise_delivery_errors = true

Без этого сообщения об ошибке трудно определить, почему письмо не отправлялось, а сейчас есть.Одна из возможностей - использование двойных кавычек вокруг пароля.Если вы использовали надежный пароль и в вашем пароле был токен, который не был экранирован, его можно было бы переосмыслить.(то есть "P@ssw\0rd" станет P@ssrd).По этой причине я всегда использую одинарные кавычки в своем коде, если только мне не нужен синтаксический сахар.

Наконец, enable_starttls_auto: true является значением по умолчанию и не нужно.

1 голос
/ 08 августа 2015

ActionMailer::Base.delivery_method = :sendmail
и
config.action_mailer.perform_deliveries = true

были два необходимых шага, которые помогли мне решить эту проблему

1 голос
/ 05 февраля 2014

Просто поместите всю конфигурацию в: конфигурации / среда / development.rb

Я имею в виду

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => "587",
  :domain               => "gmail.com",
  :user_name            => "xxx@gmail.com",
  :password             => "yyy",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

и

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true

Это сработало для меня.

0 голосов
/ 31 января 2018

Мои две копейки стоят:

У меня были те же симптомы с Rails 5.1: ничего не произошло, настройки в моем файле development.rb были полностью проигнорированы ...

Затем я вспомнил, чтобы перезапустить машину! (что волшебным образом решило проблему)

На это было указано в нескольких предыдущих комментариях.

Проблема сложная, потому что вы не ожидаете такого поведения.На мой взгляд, комментарии по умолчанию в development.rb в этом отношении вводят в заблуждение:

# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since *you don't have to restart the web server when you make code changes*.
0 голосов
/ 02 сентября 2013

Кроме того, ваше имя пользователя Gmail не имеет псевдонима.

Ссылка: https://support.google.com/mail/answer/12096?hl=en

...