Last night I had a good idea! Up until then I had been thinking of either using cron together with a PHP script capable of finding and processing every web page in the website (which was my initial idea) or of triggering a suitable PHP script via web page hits. I discounted the second idea because it might lead to page owners getting too many email messages. But last night I thought of how to restrict this to one message per day (maximum).
My idea is for the PHP script to create a text file listing all the reminders sent so far that day. Whenever the script is triggered it must first check the expiry date in the page that triggered it, then if it's a past date that means an email needs to be sent. Before sending the email however, the script must check whether the text file already contains a record of an email having been sent for the page in question.
Probably the "best" way to tackle this would be to set up a MySQL database and store the information about past emails in that. I haven't used MySQL before but I have written PHP scripts that read and write to files, so because I feel more familiar with that I'm going to work on the idea of a script that uses a text file. I'm going to assume that the file starts with a date (dd/mm/yy) and then contains just a list of URLs. It'll grow longer as the day progresses, but then be rewound by the first hit of the next day.