There is nothing in the
servlet spec about scheduling jobs.
Some containers have their own mechanisms for doing so.
In addition to the APIs provided by Ulf, there is the Quartz scheduler (which offers more fine grained control thatn the others.
Personally, for something simple and straight forward like this, I call the mailer object from a servlet and use either a unix cron job with wget or a windows scheduler task with a little command line Java app to make a web request to the servlet.
Using the OS to schedule the calls this way eliminates the need for you to spawn and maintain threads from within your web application.