Самый простой вариант.
В базу писать дату, время, id пользователя и текст сообщения. Для каждого сообщения существует статус: новое, отправка, отправлено.
С помощью крона запускать скрипт каждую минуту (или другой период времени). При запуске смотреть каким пользователям уже можно/пора отправлять сообщения.
Если уже пора, то делаем отметку в базе "идет отправка" и начинаем отправлять сообщения.
После отправки пишем в базу "отправлено".