Варианты с Rails для запуска электронной почты для всех (или некоторых) пользователей? - PullRequest
0 голосов
/ 24 августа 2011

Новый вопрос: у нас есть живой сайт с зарегистрированными пользователями. Добавлены некоторые новые функции (включая поддержку почтовых программ). Мы хотели бы вызвать электронное письмо для всех существующих пользователей (аналогичное, но не идентичное тому, которое теперь будет автоматически отправляться новым пользователям).

Какие варианты у нас есть для запуска отправки этого электронного письма? Это сообщение, скорее всего, будет отправлено только один раз, поэтому нам не нужен код (кроме самого сообщения) в приложении Rails. Нам также не нужно хранить информацию о том, кто его получил, поскольку предполагается, что все пользователи получили такое сообщение, как только мы сможем его получить.

Я думаю, что задача Rake, но все примеры, которые я могу найти, относятся к сценарию сборки?!? Или мы должны просто использовать консоль Rails в production? Возможно, получить массив всех users, которые мы хотим отправить по электронной почте, а затем deliver сообщение им?

Не уверен. Я не много работал с ActionMailer .

Ответы [ 2 ]

0 голосов
/ 12 декабря 2016

Я предлагаю выполнить грабли, запустите их один раз, и все готово.

rails g task my_namespace my_task1 my_task2

Теперь вы перебираете свою базу данных:

namespace :sent_email_to_everyone do
  desc "TODO"
  task send_that_mail: :environment do
     user = User.all
     user.each do |user|
        Yourmailer.send_email(user.email)
      end
    end
  end
end

Теперь вы просто запускаете и делаете

rake sent_that_mail
0 голосов
/ 24 августа 2011

Я бы, наверное, сделал это так:

Чтобы определить, отправила ли система электронное письмо пользователю, вы должны добавить атрибут, скажем, «sent_email», который в основном просто логический.

Я бы создал задание cron для задачи rake, которая проверяет всех пользователей с sent_email = 0. Затем я переберу каждый массив и отправлю электронное письмо и установлю sent_email = 1. Задание cron можно запускать ежедневно, в зависимости от ваших предпочтений. Вы можете использовать всякий раз, когда gem для настройки задания cron.

schedule.rb (всякий раз, когда материал)

job_type :run_script, "RAILS_ENV=:environment ruby :path/script/:task"
every 1.day do
  run_script('send_email.rb')
end

сценарий / send_email.rb

#!/usr/bin/env ruby
puts "Loading rails environment..."
require(File.dirname(__FILE__) + "/../config/environment") unless defined?(Rails)

class SendEmail
  def send_email
     users = User.send_email_to
     users.each do |user|
       OneTimeMailer.deliver_one_time_email(user)
     end
  end
end

отправители / one_time_mailer.rb

class OneTimeMailer < ActionMailer::Base
  def one_time_email(user)
    recipients user.email
    from 'your system'
    subject 'hello world'
    body 'this is a one time email. thank you'
  end
end

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

...