Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem przy wysyłaniu maila do 200 osób
Forum PHP.pl > Forum > PHP
Norbit_24
Chciałem wysłać maila do 2000 osób i wywaliło mi taki błąd:


Cytat
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@xxx.pl and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.



Więc pomyslałem, że powodem może byc to że albo jest blokada prze wysyłaniem za duzo maili naraz. Albo serwer nie wyrabia.
Więc chcę zrobić wysyłkęe maila na "party" (ale że słabo umiem php więc mam problem..;/)

  1. if(isset($_GET['mail'])=='wyslij')
  2. {
  3.  
  4. $temat1 = "$_POST[temat]";
  5. $message = "$_POST[tresc]\r\n";
  6. $header = 'MIME-Version: 1.0' . "\r\n";
  7. $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  8. $header .= 'From: xxx.pl <info@xxx.pl>'."\r\n";
  9.  
  10.  
  11. $sql = mysql_query("SELECT id FROM users");
  12. $r = mysql_num_rows($sql);
  13. //echo $r."<br /><br />";
  14.  
  15. $od=0;
  16. $do=$od+99;
  17. for($od=0; $do>=$r; $od+99)
  18. {
  19. //echo $od."<br />";
  20. //echo $do."<br /><br />";
  21.  
  22. $result = mysql_query("SELECT email FROM users LIMIT $od, $do");
  23. while($r = mysql_fetch_array($result)) {
  24. mail($r['email'],$temat1,$message,$header)
  25. or die('Nie udało się wysłać wiadomości');
  26. }
  27.  
  28.  
  29. }
  30. }


jak sprawdziłęm co sie wyswietla w zmiennych $od i $do to tylko liczby $od = 0 , $do=99

A ja chcę żeby się to powiększało..
tehaha
Po pierwsze jeżeli używasz w pętli
  1. for($od=0; $do>=$r; $od+99)
zmiennej $r, która reprezentuje liczbę userów, to nie podmieniaj jej wewnątrz pętli na inną:
  1. $r = mysql_fetch_array($result))


Po drugie ta pętla ma złą konstrukcję powinno być:
  1. for($od=0; $od<=$do; ++$od)
Norbit_24
Po poprawieniu jest tak: ale dalej coś nie działa, bo wysyła maila tyle razy ile jest userów smile.gif

  1. if(isset($_GET['mail'])=='wyslij')
  2. {
  3.  
  4. $temat1 = "$_POST[temat]";
  5. $message = "$_POST[tresc]\r\n";
  6. $header = 'MIME-Version: 1.0' . "\r\n";
  7. $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  8. $header .= 'From: xxx.pl <info@xxx.pl>'."\r\n";
  9.  
  10.  
  11. $sql = mysql_query("SELECT id FROM users");
  12. $r1 = mysql_num_rows($sql);
  13. //echo $r."<br /><br />";
  14.  
  15.  
  16. $do=$r1;
  17. for($od=0; $od<=$do; ++$od)
  18. {
  19. //echo $od."<br />";
  20. //echo $do."<br /><br />";
  21.  
  22. $result = mysql_query("SELECT email FROM users LIMIT $od, $do");
  23. while($r = mysql_fetch_array($result)) {
  24. mail($r['email'],$temat1,$message,$header)
  25. or die('Nie udało się wysłać wiadomości');
  26. }
  27.  
  28. }
  29.  
  30.  
  31. }
tehaha
jakoś dziwnie to zrobiłeś bez sensu to pierwsze połączenie do bazy, powinieneś pobrać emaile z bazy i wtedy zrobić pętle, że dla każdego adresu e-mail wyślij wiadomość
Norbit_24
Teraz już się całkiem pogubiłem (zaczynam dopiero z php)
Mógłbys ten skrypt przerobic tak, żeby wysyłał maile partami po 100maili ?
Nie chcę wysyłać każdego osobno, bo dużo czasu to zajmie czy np. 2000 maili.

Będę wdzięczny za pomoc..
tehaha
  1.  
  2. $temat1 = "$_POST[temat]";
  3. $message = "$_POST[tresc]\r\n";
  4. $header = 'MIME-Version: 1.0' . "\r\n";
  5. $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  6. $header .= 'From: xxx.pl <info@xxx.pl>'."\r\n";
  7.  
  8. $sql = "SELECT email FROM users";
  9. if(!$result = mysql_query($sql))
  10. {
  11. echo "nie udało się pobrać wynikow";
  12. } else
  13. {
  14. while($row = mysql_fetch_array($result))
  15. {
  16. mail($row['email'],$temat1,$message,$header) or die('Nie udało się wysłać wiadomości');
  17. }
  18. }


a po co wysyłać partiami?
Norbit_24
tak właśnie zrobiłem na początku, jednak wywala mi błąd: przy 2000 mailach, pzy 20 jest ok

Błąd:
Cytat
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@xxx.pl and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.


Serwer ma blokadę, albo nie wyrabia.. I wtedy nie wysyła, żadnego maila.
Dlatego chciałem wysłac to partami po 100 maili
Proszę o takie rozwiązanie..
tehaha
a spróbuj jeszcze u góry dorzucić


Partiami masz na myśli żeby wysłał 100 potem chwila przerwy i tak w kółko tak?
Norbit_24
Chcę, aby wysyłał partiami po 100 maili.
Czyli 1 partia od 0-100, druga partia: 101-200, trzecia partia: 201-300 itd aż do np. 2000
tehaha
  1. if(isset($_GET['mail'])=='wyslij')
  2. {
  3.  
  4. $temat1 = "$_POST[temat]";
  5. $message = "$_POST[tresc]\r\n";
  6. $header = 'MIME-Version: 1.0' . "\r\n";
  7. $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  8. $header .= 'From: xxx.pl <info@xxx.pl>'."\r\n";
  9.  
  10. $sql = "SELECT email FROM users";
  11. if(!$result = mysql_query($sql))
  12. {
  13. echo "nie udało się pobrać wynikow";
  14. } else
  15. {
  16. $i = 0;
  17. while($row = mysql_fetch_array($result))
  18. {
  19. mail($row['email'],$temat1,$message,$header) or die('Nie udało się wysłać wiadomości');
  20.  
  21. if(is_int($i/100))
  22. {
  23. sleep(1);
  24. }
  25. ++$i;
  26. }
  27. }
  28.  
  29. }
Norbit_24
Przy 20 mailach działa..
Zobaczę jak będzie przy większej ilości.

Dziękuje za pomoc.
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.