Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wysyłanie dużej ilości mejli...
isia
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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

(IMG:http://forum.php.pl/uwaga.gif)
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

Ten post edytował nospor 13.01.2006, 13:29:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
vieri_pl
post
Post #2





Grupa: Zarejestrowani
Postów: 406
Pomógł: 9
Dołączył: 24.07.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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

MANUAL a druga WYSZUKIWARKA (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) polecam... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Birkoff
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 23.10.2003
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
isia
post
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


Oczywiście są to ludziki, które zgodziły się na wysłanie biuletynu.
Go to the top of the page
+Quote Post
NoiseMc
post
Post #5





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
isia
post
Post #6





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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ą. (IMG:http://forum.php.pl/style_emoticons/default/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ź.

Ten post edytował isia 13.02.2006, 13:20:37
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:56