Планирование электронной почты на определенное время с помощью Django и celery
Это тот случай использования, который я ищу :
- Пользователь зарегистрируется в моем приложении
- Это приложение для создания заметок и остатков
- При создании остатков пользователи будут вводить время, которое мое приложение хочет отправить пользователю по электронной почте в это время
- Я должен использовать celery для этого. Я прочитал несколько постов и ответов на stack overflow, но не получил правильного ответа на этот вопрос.
Мое приложение написано на Django.
Когда пользователь создает новое напоминание, просто запланируйте задачу отправки email в celery. Обратите внимание, что это простое решение, но оно затруднит пользователю изменение времени уведомления после его создания.
Из этого ответа:
Для выполнения задачи в указанную дату и время вы можете использовать атрибут eta в apply_async при вызове задачи, как указано в docs
.
your_task.apply_async(kwargs={}, eta="your_send_time")
Другим решением может быть задача, выполняемая каждую 1 минуту, которая будет проверять в DB, есть ли письма, которые нужно отправить. Для этого не обязательно использовать Celery. Cron-подобная либа должна справиться с этой задачей. Например, schedule lib или django-cron или Django Commands
Edit: этот парень говорит, что вы не должны использовать dbader/schedule с Django.