Description: This routine will send emails stored in a database on set numbers of days after a begin date. For instance, if you have a baby-related website, you can have people register their due dates. Then have a series of emails that are sent at predetermined times before and after that date.
// Email Schedule, By Wayne Zeller
// Licensed Under the IDGADWYDWI licensing model.
// (IDGADWYDWI: I Don't Give A Darn What You Do With It)
// This script depends upon the ezsql.php MySql Wrapper, which you can get here:
// All Hail EZSql! Hail! Hail! Hail!
// All Hail Justin Vincent, creator of EzSql! Hail! Hail! Hail!
// (Sorry - had to have a little worship of a guy who has saved me so much time!)
// It also depends on two mySQL tables: esched_members and esched_messages
// 'esched_members' should have, at minimum, these fields:
// 'email' (the email address of the member
// 'begindate' (the date of commencement of the email campaign for this member)
// I would suggest also having an id field to use as a primary key,
// but this program won't pay attention to it.
// 'esched_messages' should have, at minimum, these field:
// 'days' (the day number on which this message is sent)
// 'subject' (the subject line of this message's email)
// 'body' (the body of the email for this message)
// Populate those tables however you see fit. On the site this was originally
// written for, esched_members is populated by a web form where people put
// the due date of their baby and their email address. Then we populate
// esched_messages through PHPMyAdmin. We have some messages set for negative
// days in order to send messages in the weeks leading up the birth, and some
// positive for following up in the months after the birth.
// (Just a little public service announcement: If you use this, as we do, to send
// emails around the birth of a baby, be sure to provide a mechanism for the member
// to remove or inactivate their record. Nothing is more horrible than losing a baby
// for some reason and then being constantly reminded by timed emails you can't
// remove yourself from.)
// Run this script every day via cron job, or (for windows) via the scheduler.
// IMPORTANT: ONLY RUN IT ONCE PER DAY, OR YOU WILL DUPLICATE THAT DAYS EMAILS!!!!
// This is an amazingly simple script, but I couldn't find php source code for doing
// this kind of thing anywhere else, so I figured I should share it anyway.
// I was actually very surprised at how small it was when I finished it.
// Anyway, here are the 15 lines of code (barely) after 36 lines of comments.
// How sad.
$messages = $db->get_results("SELECT days, subject, body from esched_messages where active = 'Y';");
foreach ($messages as $message)
$days = $message->days;
$subject = $message->subject;
$body = $message->body;
$addresses = $db->get_results("SELECT email from esched_members where TO_DAYS(now())-TO_DAYS(begindate)=$days");
foreach ($addresses as $address)
$ToAddr = $address->email;
mail("$ToAddr", "$subject", "$body");