Моя установка для запуска кампании по капельной электронной почте в рельсах заключается в том, чтобы хранить drip_stage
каждого пользователя и когда они были last_emailed_at
. И затем я планирую задачу рейка каждые десять минут, используя планировщик герою. Задача рек выглядит это:
task :send_drip_email => :environment do
users = User.where(:last_emailed_at => Time.at(0)..Time.now)
users.find_each do |u|
UserMailer.send_drip(u, :stage => u.drip_stage)
u.update_attributes(:last_emailed_at => Time.now, :drip_stage => u.drip_stage + 1)
end
end
Таким образом, он распределяет рассылку всех пользователей равномерно, а не все сразу.
Узнайте больше о Heroku планировщиком https://devcenter.heroku.com/articles/scheduler
Еще один крутой совет, который я использую для хранения сообщений электронной почты в базе данных. Я сделал модель под названием Email
с номером subject, body, and drip_stage
. И затем я фактически выдаю сообщение по электронной почте, чтобы получить доступ к переменным.
Обратите внимание, что это очень небезопасно, потому что код базы данных оценивается. Вы никогда не должны пусть ваш интерфейс создания электронной почты будет открыт для общественности
Все, что вам нужно сделать, чтобы сделать это по электронной почте
= render :inline => @email.body, :type => :haml
Есть ли причина, почему вы не планируете использовать хрон рабочих мест? – iltempo
delayed_job хорошо работает для этого. Сохраните сообщение как-нибудь, а затем создайте задание для отправки электронной почты в определенное время. – siannopollo
Я думаю, что это должно помочь: http://stackoverflow.com/questions/2655654/sending-emails-based-on-intervals-using-ruby-on-rails – Lucas