Почему этот комплекс?
Все, что вам нужно, это запланировать работу. Например, вы можете использовать Delayed::Job
. Delayed::Job
дает вам возможность запланировать работу в определенное время, используя символ run_at
, например:
Delayed::Job.enqueue(SendEmailJob.new(...), :run_at => scheduled_at)
Ваша работа - это класс, который должен реализовывать метод perform
. Внутри этого метода вы можете вызвать почтовую службу, ответственную за отправку электронной почты. scheduled_at
может храниться в базе данных и обновляться при каждом запуске метода perform
.