Questo è come vedo io una soluzione lato client, il cui refrsh avviene ogni 24 ore.
Se trasformi questa chiamata che avviene in modo sincrono attraverso il metatag di refresh in chiamata asincrona tramite ajax hai un'applicazione stabile lato client.
Codice PHP:
<html>
<head>
<title>Job di invio mail di sollecito</title>
<meta http-equiv="refresh" content="86400; url=">
</head>
<body>
<?php
// Creazione dell'array mailing_list, contenente gli array degli indirizzi mail, il nome e l'ID degli utenti che non hanno pagato:
$mailing_list = array(array(), array(), array());
// ...Connessione al DB
// Query di selezione degli utenti che non hanno pagato (ipotetico campo "payment" che memorizza l'avvenuto pagamento):
$query = "SELECT mail_address FROM utenti WHERE payment='0'";
if (mysql_query($query, $db)) {
$result = mysql_query($query, $db);
while ($row = mysql_fetch_assoc($result))
{
$mail_address = $row['mail_address'];
$user_name = $row['user_name'];
$user_id = $row['user_id'];
// aggiunta dell'indirizzo email, del nome e dell'ID dell'utente che non ha pagato all'array mailing list:
array_push($mailing_list[0], $mail_address);
array_push($mailing_list[1], $user_name);
array_push($mailing_list[2], $user_id);
}
} else { echo "Errore nella query di estrazione della mailing list."; }
// Creazione dell'header delle email da inviare alla mailing list:
$header = "From: 'Verifica pagamenti sito.com' <pagamenti@sito.com>;\n";
$header .= "CC: 'qualcuno in cc' <qualcuno@indirizzo.com>;\n";
// Se il testo della mail è uguale per tutti, il corpo del messaggio è unico e metti tutti in Bcc:
for ($i = 0; $i < count($mailing_list[0]); $i++) {
$header .= "BCC: '".$mailing_list[1][$i]."' <".$mailing_list[0][$i].">;\n";
}
$header .= "Priority: 1\n";
$header .= "X-Mailer: PHP sendmail\n\n";
$subject = "Sollecito di pagamento causale x...";
$message = "Le ricordiamo che ha dimenticato di pagare la scadenza X...";
if (@mail($to, $subject, $message, $header))
{
echo "Mail di sollecito inviata correttamente.";
$subquery = "";
for ($i = 0; $i < count($mailing_list[0]); $i++) {
$subquery .= " user_id='".$mailing_list[2][$i]."'";
if ($i < count($mailing_list[0] - 1)) { $subquery .= " OR"; }
}
}
// Query di aggiornamento dell'invio dei solleciti agli utenti selezionati:
$query = "UPDATE utenti SET payment='1' WHERE".$subquery;
if (mysql_query($query, $db)) { echo "Aggiornamento del DB avenuto correttamente."; }
else { echo "Errore nella query di aggiornamento del DB."; }
?>
</body>
</html>