Вы можете сделать это с помощью очередей задач - в основном, когда вы получаете запрос «напомнить мне в дату / время X, отправив электронное письмо», вы создаете новую задачу со следующей базовой структурой:
if current time is close to or past the given date/time X:
send the email
else
fail this task
Если время напоминания далеко в будущем, первые несколько раз задание запланировано, оно не будет выполнено и будет запланировано на более позднее время.Недостатком этого подхода является то, что он не гарантирует, что задание будет выполнено именно тогда, когда должно быть отправлено напоминание - это может занять некоторое время до или после.Вы можете уменьшить это окно, учитывая, что ваша задача может выполняться в течение 10 минут, поэтому, если вы находитесь в течение 10 минут с момента напоминания, спите до нужного времени, а затем отправьте электронное письмо.
Если напоминания должны быть отправлены как можно ближе ко времени, просто используйте Backend - сохраняйте экземпляр работающим вечно и отправляйте ему все напоминания, и он может непрерывно просматривать все напоминания, которые он долженотправить и отправить их точно в нужное время.