Ale wiadomo że funkcja mail wyśle jednorazowo max. 200 do 500 maili.
W tabelach mam nazwy kolumn między innymi ID oraz mail.
Poniższy przykład pokazuje w jaki sposób wysyłać większą ilość maili przy użyciu crona, identyfikatorem jest tutaj jednak data.
Kod
<?php
/********************************************************
* Skrypt ten będzie uruchamiany raz dziennie jako cron. *
* Odpyta on bazę danych i wyśle maila do tych osób, *
* które pobrały licencję próbną 45 dni temu. *
********************************************************/
$db = mysql_connect("localhost", "root");
mysql_select_db("evaluators");
// Sformatowanie daty dla celów zapytania
// SPrawdzamy popołudnie 46 dni temu
$now = time();
$fortyfive_days_ago = $now - 3888000 - 43200;
$target_date = date('Y-m-d', $fortyfive_days_ago);
$send_info_email_arr = array();
$query = "SELECT email
FROM sent_licenses
WHERE sent_date >= '$target_date 00:00:00'
AND sent_date <= '$target_date 23:59:59'
";
$result = mysql_query($query,$db);
if (mysql_num_rows($result) > 0) {
while ($email_arr = mysql_fetch_array($result)) {
$to = $email_arr[0];
$from = 'mailbot@example.com';
$subject = 'Licencja próbna na oprogramowanie wygasła';
$msg = 'Próbną wersję oprogramowania pobrałeś 45 dni temu. Jeżeli nie uiścisz opłaty, program sam się usunie.';
$mailsend = mail($to, $subject, $msg, "From: $from");
$send_info_email_arr .= "\n".$to."\n";
}
// Wyślij e-maila informującego o wykonanych działaniach
$info_msg .= "Dzisiaj wysłano e-maila do następujących użytkowników:<BR><BR>\n";
$info_msg .= print_r($send_info_email_arr);
$info_mail = mail('webdev@example.com', "Zadanie Cron na dzień $target_date", $info_msg, "From: cronjob@example.com");
} else {
// Jeżeli dzisiaj nie było żadnych adresatów, również o tym poinformuj
$info_msg = "Dziś nie wysłano e-maila do nikogo.";
$info_mail = mail('webdev@example.com', "Zadanie Cron na dzień $target_date", $info_msg, "From: cronjob@example.com");
}
?>
/********************************************************
* Skrypt ten będzie uruchamiany raz dziennie jako cron. *
* Odpyta on bazę danych i wyśle maila do tych osób, *
* które pobrały licencję próbną 45 dni temu. *
********************************************************/
$db = mysql_connect("localhost", "root");
mysql_select_db("evaluators");
// Sformatowanie daty dla celów zapytania
// SPrawdzamy popołudnie 46 dni temu
$now = time();
$fortyfive_days_ago = $now - 3888000 - 43200;
$target_date = date('Y-m-d', $fortyfive_days_ago);
$send_info_email_arr = array();
$query = "SELECT email
FROM sent_licenses
WHERE sent_date >= '$target_date 00:00:00'
AND sent_date <= '$target_date 23:59:59'
";
$result = mysql_query($query,$db);
if (mysql_num_rows($result) > 0) {
while ($email_arr = mysql_fetch_array($result)) {
$to = $email_arr[0];
$from = 'mailbot@example.com';
$subject = 'Licencja próbna na oprogramowanie wygasła';
$msg = 'Próbną wersję oprogramowania pobrałeś 45 dni temu. Jeżeli nie uiścisz opłaty, program sam się usunie.';
$mailsend = mail($to, $subject, $msg, "From: $from");
$send_info_email_arr .= "\n".$to."\n";
}
// Wyślij e-maila informującego o wykonanych działaniach
$info_msg .= "Dzisiaj wysłano e-maila do następujących użytkowników:<BR><BR>\n";
$info_msg .= print_r($send_info_email_arr);
$info_mail = mail('webdev@example.com', "Zadanie Cron na dzień $target_date", $info_msg, "From: cronjob@example.com");
} else {
// Jeżeli dzisiaj nie było żadnych adresatów, również o tym poinformuj
$info_msg = "Dziś nie wysłano e-maila do nikogo.";
$info_mail = mail('webdev@example.com', "Zadanie Cron na dzień $target_date", $info_msg, "From: cronjob@example.com");
}
?>
Ja niestety nie dysponuję datą, lecz tylko ID. Macie jakiś pomysł aby przerobić zapytanie tak aby cron uruchamiając skrypt zaczynał od klejnych 200 nowych pozycji ID
