2012-02-16 1 views
3

У меня есть приложение Rails, в котором я пытаюсь создать кампанию для почтовых сообщений. В основном то, что я представляю, - это после того, как кто-то подписался, я пришлю им конкретное письмо через два дня после регистрации, еще через неделю после регистрации и еще через месяц после регистрации.Создание капель почтовых кампаний Rails

Каков наилучший способ для этого? Есть ли драгоценный камень, который делает его легким, или сторонний поставщик электронной почты, который делает это хорошо? Я уже использую SendGrid для отправки электронной почты и просмотра их API. Я не нашел ничего, что делает именно это. Спасибо за любую помощь!

+0

Есть ли причина, почему вы не планируете использовать хрон рабочих мест? – iltempo

+0

delayed_job хорошо работает для этого. Сохраните сообщение как-нибудь, а затем создайте задание для отправки электронной почты в определенное время. – siannopollo

+0

Я думаю, что это должно помочь: http://stackoverflow.com/questions/2655654/sending-emails-based-on-intervals-using-ruby-on-rails – Lucas

ответ

0

отложенной работы, вероятно, ваш лучший выбор:
https://github.com/collectiveidea/delayed_job

Если вы не в состоянии запустить отдельный рабочий процесс по какой-то причине, а затем проверить кран:
https://github.com/dshipper/Faucet

Я бы настоятельно рекомендуем использовать сторонний SMTP-провайдер для отправки, а не через Postfix, иначе у вас могут возникнуть проблемы с доставкой, поскольку большинство бесплатных почтовых провайдеров (Gmail, Yahoo Mail, Hotmail) все фильтруют.

Лучшие варианты, на мой взгляд, это Mailgun или Mandrill.

1

Моя установка для запуска кампании по капельной электронной почте в рельсах заключается в том, чтобы хранить 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