I have my transactional email system setup & by default people get emails as events happen:
class Comment
after_create :email_original_poster
def email
Obviously you shouldn't have to create your own queueing system. I haven't used delayed_job, but I have used resque in conjunction with a nice little gem called resque_mailer that should do exactly what you want. What's nice about resque_mailer is that, once it's set up, you don't have to change how you'd normally send mail: MyMailer.some_mailing({vars}).deliver
If for some reason you want to not use the queue to send the mail (send it right away), you just need to add ! after deliver and it'll do just that.
Look into resque (with redis) and resque_mailer, I think it'll do what you want.