посмотрел, пишет что есть
Как реализовать (с крон\'ом):
Допустим адреса юзеров и письма (отправленные и которые нужно отправить) хранятся в БД. У записи в БД, у письма есть поле 
"sent", которое отражает было письмо уже отправлено или еще нет. Допустим, его значения: 
0 (по-умолчанию) - еще не отправлено, 
1 (или текущее время) - уже отправлено.
1. Пишешь скрипт (назовем его 
mail_queue.pl), который обращается к БД, "забирает" список писем у которых 
sent = 0. Если есть такие письма, забирает список пользователей, которым эти письма нужно отправить и в цикле, каждому из пользователей их отсылает, если нет - 
просто завершается. После того как он отправит каждое из писем, для него устнавливается 
sent отличным от нуля (см. выше).
2. Модифицируешь скрипт, отрывок которого ты привел. В функции 
add реализуешь простое добавление в БД записи, с телом письма, которое позже нужно будет отправить юзерам (поле 
sent у него устанавливаешь равным 
0). Также, в выводе функции вместо 
print "Ok!"; - можешь написать 
print "Письмо сохранено. Через несколько минут оно будет отправлено адресатам"; в зависимости от того, с какой периодичностью крон\'ом у тебя будет запускаться скрипт 
mail_queue.pl.
3. Добавляешь в 
crontab, например, такую строку (параметры посмотри в man\'e):
#minute    hour    mday    month    wday    command
*/10       *       *       *        *       /local_path/to_script/queue_mail.plТ.е. скрипт 
mail_queue.pl будет запускаться с интервалом в 10 минут, каждый день.
Допустим за 10 минут скрипт queue_mail.pl не успел отправить все письма (полностью отработать), а крон его еще раз запустил, скрипт возьмет те письма, которые еще не отправлены, но которые уже в работе у предыдущего сеанса (возможно даже в данный момент отсылаются) - в итоге он их может 2 раза отправить. Чтобы такого не было используй "lock/unlock tables".Таким образом, произойдет как бы разделение труда 

 Работа по добавлению писем будет осуществляться пользователем через браузер, а их отправка будет происходить на стороне сервера и никак его не затронет.
В кратце вроде так, если где-то напутал - укажите. 

-----
но я им пользоватся вообще не умею
...проще некуда - это типа "планировщик заданий" под unix
man crontab - там все описано и с примерами.
а средствами Perl это сделать можно?
На бесплатном хостинге, где скрипты нельзя было запускать по расписанию, я запускал скрипт вставляя на страницу код рисунка: 
![]() http://some.url/cgi-bin/script.pl" width="1" height="1">
http://some.url/cgi-bin/script.pl" width="1" height="1"> - его вывод мне был не важен (скрипт запустится и отработает при посещении странцы где расположен этот код, даже если в процессе загрузки "этого рисунка 

" нажать в браузере "Стоп").
На 
cpan\'e кажется видел модуль - "заменяюший" crontab - позволяет запускать скрипты по времени, без крон\'а.
Удачи!