![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam bazę użytkowników na moich stronach internetowych. Chciałbym ich poinformować o nowych promocjach i produktach, więc chce wysłać do nich jednorazowego maila.
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"); } ?> 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 ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 10 Dołączył: 26.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
zamiast:
Kod WHERE sent_date >= '$target_date 00:00:00' AND sent_date <= '$target_date 23:59:59' daj Kod ORDER BY twojeID DESC LIMIT 0,200
-------------------- Rachunkowość w biurze we Wrocławiu: biuro rachunkowe wrocław, miejca parkingowe przy Okęciu parking Okecie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
No ok. ale za każdym razem będzie pobierał pierwsze 200 rekordów, a chodzi mi o to aby za każdym razem były to kolejne 200
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 10 Dołączył: 26.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
być może jest prostszy sposób
![]() najpierw pobierasz sumę rekordów, dzielisz ją przez 200 i masz ilośc pętli, jak masz ilość pętli to zapuszczasz to co wyżej w pętle, zamiast 0 dajesz kolejne 200-setki i masz załatwione ![]() -------------------- Rachunkowość w biurze we Wrocławiu: biuro rachunkowe wrocław, miejca parkingowe przy Okęciu parking Okecie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie chce eksperymentować i wysyłać do ludzi SPAM-u, więc sprawdźcie czy dobrze kombinuje.
Kod <?php
$db = mysql_connect("localhost", "root"); mysql_select_db("evaluators"); $send_info_email_arr = array(); // zliczam te rekordy $ilosc = "SELECT COUNT(*) FROM sent_licenses"; $resultilosc = @mysql_query($ilosc); $row = mysql_fetch_array($resultilosc); $count_rekords = $row[0]; $podziel = '200'; $iloscwywolan = ceil ($count_rekords / $podziel); for($i = 0; $i < $iloscwywolan; $i++) { $query = "SELECT email FROM sent_licenses ORDER BY twojeID DESC LIMIT 200,200 "; $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"); } } ?> |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A czy nie lepiej będzie zapisać query jako:
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
byle zliczalo za każdym razem gdy cron wykona skrypt kolejne 200 rekordow
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A jak nie bedzie zliczać to zrób plik tekstowy, w nim zapisz kolejne $licz_od, i po wczytaniu wiersza do zmiennej od razu go usuwaj w pliku i zapisuj plik. Wtedy już powinno na pewno zadziałać.
![]() -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 14:41 |