Jak nie masz dostępu do crona, to ( jeżeli strona jest często odwiedzana ! )
Możesz pod index.php podpiąć wywołanie strony wysyłającej maile.
require_once (./wyslij maile.php)
na początku sprawdzić czy data się zgadza, jeżeli tak -> wysalasz, i zmieniasz gdzieś w DB ( stan = wykonano ) ( żeby kolejne przeładowanie, nie odpaliło skryptu ponownie).
Może to jest głupie, ale dawniej tak robiliśmy !
I działało, warunek ( podpiąć pod index.php, i duży ruch) bo inaczej jak na twoją stronę zagląda 20 osób dziennie, to będziesz miał opóźnienia w wysyłce, aż ktoś ją przeładuje