посмотрел, пишет что есть
Как реализовать (с крон\'ом):
Допустим адреса юзеров и письма (отправленные и которые нужно отправить) хранятся в БД. У записи в БД, у письма есть поле
"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"> - его вывод мне был не важен (скрипт запустится и отработает при посещении странцы где расположен этот код, даже если в процессе загрузки "этого рисунка
" нажать в браузере "Стоп").
На
cpan\'e кажется видел модуль - "заменяюший" crontab - позволяет запускать скрипты по времени, без крон\'а.
Удачи!