Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie dużej ilości mejli...
Forum PHP.pl > Forum > PHP
isia
Witam...
Napisałam skrypt do wysyłania biuletynów za pomocą specjalnego formularza.
Loguję się, pobieram mejle z bazy i wysyłam.
Na każdy adres wysyłany jest jeden mejl, pobierany w pętli z bazy dodawany jako zmienna do funkcji mail().

  1. <?php
  2.  
  3. $subjectText = "temat";
  4. $PSendFullText = "tekst mejla";
  5. $nadawca = "Froma: nadawca@domena.com.plrn";
  6.  
  7.  
  8. while ($row = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {
  9.       $mejl = $row["email"];  
  10.       if (mail($mejl, $subjectText, $PSendFullText, $nadawca)) { $i++; }
  11. }
  12. print "wysłano: ".$i." biuletynów<br>"; 
  13.  
  14. ?>


poprawiam
---
nospor


W bazie mam około 500 mejli. Po jakimś czasie wywala mi błąd serwera proxy i niestety nie wyświetla podsumowania ile wysłał biuletynów.
Wszyscy otrzymują mejle ale stronka niefajnie się wykrzacza.
Podejrzewam, że serwer proxy nie może utrzymać tak długiego połączenia. Ale nie wiem czy mam rację. Czy ktoś coś takiego robił? i czy jest na to jakaś rada?

pozdrówko
isia
vieri_pl
Poszukaj było wiele tematów na ten temat, pamiętaj zasada pierwsza:

MANUAL a druga WYSZUKIWARKA smile.gif polecam... smile.gif
Birkoff
Hmm, z takim emailowaniem to problemy wynikaja z kilka rzeczy:
1. czas wykonania skryptu
2. ustawienia serwera - ilość emaili wyslanych w ciągu 1 godziny z danego konta

Stosujac ten skrypt wysylasz emaile w petli - im wiecej emaili tym dluzej trwa wysylanie. Jesli przegladarka nie dostanie odpowiedzi w ciagu 30 sekund (nie dam glowy...) to wywali blad...

Ustawienia serwera - to juz trzeba sie dowiadywac - na kontach komercyjnych czesto mozna takie informacje znalezc w regulaminie lub informacjach technicznych.

Zwroc uwage na jeszcze jeden fakt - przepisy antyspamowe. Wg prawa mozesz wysylac emaile TYLKO do osob, ktore same z wlasnej woli udostepnily Ci swoj email - na przyklad przez zapisanie sie do newslettera na stronie...

Stworzylem kiedys skrypt wysylajacy emaile - baza ponad 4000 emaili - idea byla taka, zeby podzielic taka wysylke na paczki po 50 emaili. Utrudnieniem jest to, ze kazda paczke trzeba wysylac recznie, no ale dziala...

  1. <?php
  2. require("../class.phpmailer.php");
  3.  
  4. //zakres emaili
  5. if ($_POST['paczka']==1) {
  6. $zakres="0, 50";
  7. }
  8. else {
  9. $p=$_POST['paczka']*50+1;
  10. $k=50;
  11. $zakres=$p.", ".$k;
  12. }
  13.  
  14. //pobranie z bazy danych emaili
  15. $emails=db_query("SELECT * FROM `tabela_emaili` ORDER BY email LIMIT ".$zakres.""); 
  16.  
  17. //wysylka do grupy
  18. $mail = new PHPMailer();
  19. $mail->CharSet  = "iso-8859-2";
  20. $mail->From  = 'nadawca@domena.pl';
  21. $mail->FromName = 'Nadawca Imie Nazwisko';
  22. $mail->Mailer = "mail";
  23. $mail->Subject = $_POST['temat'];
  24.  
  25. while ( $email=db_fetch_array($emails) ) {
  26. $body=' tu tresc emaila... ';
  27.  
  28. $mail->Body = $body;
  29. $mail->AltBody = $body;
  30. $mail->AddAddress($email['email']);
  31. $mail->Send();
  32. $mail->ClearAddresses();
  33. }
  34.  
  35. $_SESSION['paczka']=$_POST['paczka'];
  36. header("Location: grupy.php");
  37. ?>


Pominalem tu oczywiscie zbedne fragmenty - mam nadzieje ze to co jest daje jakis obraz koncepcji...

Pozdrawiam!

Birkoff
isia
Oczywiście są to ludziki, które zgodziły się na wysłanie biuletynu.
NoiseMc
Ja pisząc ostatnio taką aplikację rozwiązałem problem w następujący sposób:
- za pomocą GUI wrzucałem maile do kolejki
- za pomocą skryptu odpalanego Cronem wyciągałem maile z kolejki i wysyłałem

Należy tylko uważać, bo u niektórych dostawców Cron ubija skrypt jeżeli ten pracuje dłużej niż 30s tak więc trzeba też w skrypcie uwzględnić ponawianie wysyłki.

Do wysyłania maili używam:
PEAR::Mail_Mime

Niektórzy do obsługi kolejki używają też
PEAR::Mail_Queue

Była też dyskusja na forum na ten temat:
http://forum.php.pl/index.php?showtopic=36277
oraz:
http://forum.php.pl/index.php?showtopic=38705
isia
Rzeczywiście z komunikatu na serwerze wynika, że przekroczył czas.

Spóbowałam skryptu Birkoffa.
Działa ale rzeczywiście pracochłonne.

Próbowałam też wysyłać paczki po 50 sztuk w pętli powtarzającej się 11 razy - tyle mam w bazie mejli. Ale wywala ten sam błąd co na początku. Skrypt musiałby wiedzieć czy skończyła się sesja i dopiero zaczynać nową. questionmark.gif?

Ponieważ nie można napisać dwóch odpowiedzi - dopisuję info.

Zaczęłam czytać strone n.t. Mail_Queue.
Zanim jednak wystartuję z czymkolwiek proszę o informacje czy przy stosowaniu muszę mieć jakiś "specjalny" dostęp do serwera. Chodzi o to, że korzystam z serwera na zasadzie wysyłania plików FTP i dostęp do jednej bazy gdzie moge zakładać tabele i nic więcej.

Będę wdzięczna za odpowiedź.
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.