Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System newslettera/mailingu - optymalizacja
Forum PHP.pl > Forum > PHP
gachowy
Witam.

Potrzebuję małej porady. W jaki sposób najlepiej zoptymalizować kwestię wysyłania newslettera/mailingu do powiedzmy 500 osób?

Aktualne rozwiązanie jakie stosuje, to mniej więcej coś takiego, uruchamiane przez CRONa:
  1. <?php
  2.  
  3.  
  4. $rec = array(); // array with ~500 mails from DB
  5.  
  6. $message = 'Lorem ipsum'; // message from DB (more text+HTML than this Lorem Ipsum - simple mail template + 200-300 words)
  7.  
  8. foreach($rec as $r)
  9. {
  10. $to = $r;
  11. $subject = $message;
  12. $headers = 'MIME-Version: 1.0' . "\r\n";
  13. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  14. $headers .= 'From: Site.com <no-reply@site.com>' . "\r\n";
  15.  
  16. mail($to, $subject, $message, $headers);
  17. }


Z tego co obliczyłem, zajmuje to mniej więcej "1.0787600835164 Min". Czy taki execution time tego, zadziała na standardowym configu php.ini?

Prosiłbym o podpowiedź:
-czy będzie to lepiej działało z wykorzystaniem SMTP zamiast mail()?
-czy podzielić to wysyłanie na kilka tur, jeśli tak, to w jaki sposób najlepiej, aby jedno uruchomienie przez CRONa, rozesłało wszycho?

Z góry dzięki za odpowiedzi smile.gif

Pozdrawiam
c1chy
Wszystko zależy od hostingu 1 minuta to nie długo, jednak niektóre skrypty mogą mieć 30 sekund, nie ma czegoś takiego jak standardowy config php.ini. Jeżeli chcesz zrobić to cronem to zapisuj maila do wysłania w bazie danych a ze skryptu pobieraj rekordy i po wysłaniu usuwaj z kolejki cron możesz uruchamiać np. co 5 minut czy nawet co 1 minutę, jeżeli nie będzie maili w kolejce to skrypt od razu praktycznie zakończy swoje działanie.

Nie sądzę że SMTP() przyśpieszy tutaj cokolwiek, będzie potrzebny dodatkowy czas na komunikację z zewnętrznym serwerem.
gachowy
Ze 'standardowym configiem php.ini' chodziło mi o ustawienia z 'czystej' instalacji serva www smile.gif

Dzięki wielkie za podpowiedź smile.gif

Zastosuję więc takie rozwiązanie - po wygenerowaniu owego maila (cronjob co owy tydzień/dzień), co 5 minut uruchamiać będę skrypt, który zajmie się rozesłaniem maila do kolejnych x odbiorców znajdujących się na liście oczekujących do wysyłki smile.gif
acidm
Wysyłaj przez SMTP,w odstępach,paczkami.Odstępy od kilku do kilkunastu minut.Paczki po kilkadziesiąt maili.Na serię wysyłki (paczkę) przez smtp z serwerem łączysz się raz, każde wywołanie mail() to nowe połączenie,ogółem lepiej z mail() sobie darować bo maile mogą z automatu trafić do śmietnika.Domyślny max_execution_time to 30 sek.
Pyton_000
Cytat(acidm @ 25.11.2013, 10:46:21 ) *
Domyślny max_execution_time to 30 sek.

dla standartowo odpalanych skryptów via przeglądarka. Jeżeli chodzi o skrypty via CLI to te ograniczenia nie obowiązują. Z tego co pamiętam to chyba jest brak limitu czasu wykonania.
acidm
Dobrze wiedzieć smile.gif
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.