Массовая отправка писем Rails. Почему письмо отправляется только последнему user'у из User.all?

def alarm_email() # TODO в будущем обрабатывать через пакеты (User.find_each)
  delivery_options = {
      address: "smtp.mail.ru",
      port: 465,
      domain: "mail.ru",
      authentication: :login,
      tls: true,
      user_name: "login@mail.ru",
      password: "password",
      enable_starttls_auto: true
  }
  for user in User.all
    #puts user.email
    mail(to: user.email,
         subject: "Subject",
         delivery_method_options: delivery_options
    )
    #sleep (Random.new.rand(3.0..8.0))
  end
end
  • Вопрос задан
  • 3542 просмотра
Решения вопроса 1
kirillplatonov
@kirillplatonov
Ruby on Rails developer
# controller
User.all.pluck(:email).each do |email|
  NoticeMailer.alarm_email(email).deliver
end

# NoticeMailer
def alarm_email(email)
  # Эти настройки в конфиг нужно вынести
  delivery_options = {
      address: "smtp.mail.ru",
      port: 465,
      domain: "mail.ru",
      authentication: :login,
      tls: true,
      user_name: "login@mail.ru",
      password: "password",
      enable_starttls_auto: true
  }

  mail to: email, subject: "Subject", delivery_method_options: delivery_options
end


И настоятельно рекомендую https://github.com/collectiveidea/delayed_job или аналоги для таких задач.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы