Si vous ne pouvez pas avoir un script en cours d'exécution en continu, quelque chose doit le déclencher, donc cela devrait s'appuyer sur les composants internes de votre système d'exploitation. Dans un environnement Unix, une tâche cron, comme vous le dites, ferait l'affaire.
Définissez cron pour exécuter le script, et faites attendre le script pendant un temps donné, puis continuez à s'exécuter et à envoyer jusqu'à ce que le prochain e-mail soit plus que ce temps donné. Ensuite, faites en sorte que votre script ajoute une nouvelle tâche cron pour une nouvelle heure de réveil.