When a use subscribes start sending the messages from the first one according to the schedule
If a new messages is added, send it out to everyone who has already passed that point in the course.
(e.g. for every subscriber create a table where the system can mark which message was already sent.
When a new message is added this bit is off for every subscriber. Then when the list is processed,
for each user pick the first item that has not been sent to her and send that message.
Later it can also have some expected reaction. (e.g. the user opened the mail or clicked on some link)
and he would not get the next message until this is fulfilled but he might be nagged to act on the previous task)
Later it can also have some expected reaction. (e.g. the user opened the mail or clicked on some link) and he would not get the next message until this is fulfilled but he might be nagged to act on the previous task)