[eluser]jedd[/eluser]
CI, heck, Apache/http/php/etc - are reactive. So you're a bit limited if you're trying to use them to do something they're not designed to do, such as schedule tasks.
Use cron - it's exactly what it was designed to do well.
If you want to do something slightly ugly, you could use cron to hit (using lynx > //dev/null, say) a web page that generates the emails. A few CMS products use something like this to simplify the bash/binary component of their self-maintenance scripts. It means you can use cron on a remote machine to trigger it, too. That may be useful.
Extrapolating, if you wanted to do something that was truly ugly, and you were confident you were going to get web page hits around the time you wanted, you could have a function (called on every page hit) that first checks if the mail has been sent for that time period, and if not it would a) send it, and b) update the database to indicate the mail was sent.