I've considered doing this same thing. You will definitely need a database to store these events as they are entered. Why? Imagine I set a reminder for my wedding anniversary which is 8 months from now. Is the script going to pause for 8 months and then send an email, finally completing next year? Hell no. We are going to store this reminder in a database and have a timer that keeps checking for reminder events and sending out any that are pending.
In order to get this working you'll need a variety of things
1) A form where folks enter reminders. I would advise looking at outlook or gmail calendar or iOS calendar or something for this. It's a bit more complex than you might think. For instance, how many reminders for each event? Do you have to cancel the reminders in order for them to stop? If so, how? What about recurring events?
2) A database to store the reminders. You'll need to think carefully about what database tables you need and what columns each table has.
3) A cron job (a scheduled task on Windows) that checks your database every minute/15 minutes/whatever for events for which a reminder must be sent. You'll need to think through the logic required to check your database and how to identify records that need a reminder sent right now.
4) A mail script (or notifier of some kind) to send out the notifications. You may run into spam blockers or various other issues.
5) What happens when an event passes? Do you clean up your database? If not, this database could grow too large over time.