Skocz do zawartości

mailing do zarejesrowanych użytkowników


Dominik23

Rekomendowane odpowiedzi

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.

<?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 ??.

Witryna Biznesu - najlepsza promocja biznesu w sieci.

Odnośnik do komentarza
Udostępnij na innych stronach

Bardzo nie podoba mi się to rozwiązanie. I nie bardzo rozumiem z jakiego powodu nie dysponujesz datą? Czy dlatego, że nie masz wpływu na konstrukcje bazy? Czy po prostu nigdzie jej nie zapisujesz? Jeśli to pierwsze, to ciężko będzie. Jeśli to drugie...

1) Dodaj pole np. was_sent. (tinyint(1) - wystarczy, lub jakis enum)

2) Po wysłaniu każdego maila, ustaw to pole na 1.

3) Cron w momencie uruchomienia skryptu ponownie, sprawdzi które rekordy NIE POSIADAJĄ 1 w was_sent i właśnie tych użyje.

Tak trzymam po cichu kciuki, aby pomogło. Jeśli nie, to będziemy się dalej zastanawiać.

Pozdrawiam.

Feci Quod Potui Faciant Meliora Potentes...

Odnośnik do komentarza
Udostępnij na innych stronach

Ten kod poniżej ma szanse zadzialać, nie chce eksperymentować bo pujdzie masowy mailing

<?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");

}
}
?>

albo tak jak poniżej

<?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);



$query = "SELECT email
	  FROM sent_licenses
	  ORDER BY ID DESC LIMIT ".$licz_od." , 200;";
$licz_od += 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");

}

?>

pleass heelllppp

Witryna Biznesu - najlepsza promocja biznesu w sieci.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności