Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wysyłanie dużej liczby emaili
Forum PHP.pl > Forum > Przedszkole
yalus
Witam,

Przejrzałem forum i wiem, że temat już był wałkowany ale nigdzie nie mogłem znaleźć przykładowego skryptu wysyłającego emaile,
bo chciałbym go porównać z moim i dowiedzieć się czy mój jako tako nadaje się do tego zadania.

Otóż mój skrypt do wysyłania wygląda tak:
napisałem go po swojemu - skrypt wysyłać wysyła mejle, ale do końca nie wiem czy tak to się robi, mam na myśli pobieranie adresów email z bazy i wysyłanie wiadomości w pętli 'while' questionmark.gif
skrypt uruchamiany jest cronem co 10min i wysyła 100 mejli jednorazowo, w bazie znajduje się 1000 mejli, czyli w ciągu 100minut powinien wysłać wszyskie, ale czasami dostaje wiadomosc raport z wykonania harmongramu: " UWAGA! Wykonywanie komendy zostało zatrzymane z powodu przekroczenia limitu czasowego!"

bardzo proszę o sugestie, uwagi





  1. <?php
  2. $er = error_reporting(0);
  3. include('Mail.php');
  4. include('Mail/mime.php');
  5.  
  6. $sql = "select login, id, email from users where wyslane = '' limit 100";
  7. $result = mysql_query($sql);
  8.  
  9. while ($row = mysql_fetch_array($result))
  10. {
  11. $user = $row['login'];
  12. $emal = $row['email'];
  13. $id_eml = $row['id'];
  14. if (validate_email($emal) == true)
  15. {
  16. $text = "Tresc wiadomosci";
  17. $subject = "Temat wiadomosci";
  18. $from = "Kontakt<kontakt@jakas_domena.pl>";
  19. $to = $emal;
  20.  
  21. $message = new Mail_mime();
  22. $message->setHTMLBody($text);
  23. $message->setTXTBody($text);
  24.  
  25. $mimeparams = array("text_encoding" => "8bit",
  26. "text_charset" => "utf-8",
  27. "html_charset" => "utf-8",
  28. "head_charset" => "utf-8");
  29.  
  30. $body = $message->get($mimeparams);
  31.  
  32. $extraheaders = array("From" => $from,
  33. "To" => $to,
  34. "Subject" => $subject,
  35. "Reply-To" => $visitor_email);
  36.  
  37. $headers = $message->headers($extraheaders);
  38.  
  39. $smtp =& Mail::factory('smtp',
  40. array ('host' => "jakis_host.pl",
  41. 'auth' => true,
  42. 'username' => "username",
  43. 'password' => "password"));
  44.  
  45. $mail = $smtp->send($to, $headers, $body);
  46.  
  47. if (PEAR::isError($mail)) {
  48. $sql1 = "update users set wyslane = 'e' where id = '$id_eml' limit 1";
  49. $result1 = mysql_query($sql1);
  50. }
  51. else
  52. {
  53. $sql1 = "update users set wyslane = '1' where id = '$id_eml' limit 1";
  54. $result1 = mysql_query($sql1);
  55. }
  56. }
  57. else
  58. {
  59. $sql1 = "update users set wyslane = '0' where id = '$id_eml' limit 1";
  60. $result1 = mysql_query($sql1);
  61. }
  62.  
  63. }
  64.  
  65. ?>
markonix
Zwiększ time limit lub zmniejsz jednorazową paczkę.
yalus
dzieki za odpowiedz,


masz na myśli zwiekszenie czasu wykonania skryptu?
czy odstepy miedzy odpalaniem crona? (te 10min)
markonix
Skoro skrypt wywala się przez przekroczenie czasu to logicznym jest jego zwiększenie.

http://php.net/manual/en/function.set-time-limit.php

W dużej mierze i tak to nie działa (ustawienie odgórne) dlatego zaproponowałem kolejne rozwiązanie - zmianę 100 maili w mniejszą paczkę.
Ja bym zmniejszył liczbę maili ale ustawił częściej crona - każde wywołanie działa oddzielnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.