Sending mail (ActionMailer) after a delay

Have a look at BackgrounDrb. Essentially you'd do something like send_me_later =>2.hours.from_now), then a BackgrounDrb worker would scan the table every minute and send mail as needed. The controller could always destroy the DeferredMail object before it was sent, if you needed to cancel the operation.