Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: optymalizacja mail() lub jakiś zamiennik
Forum PHP.pl > Forum > PHP
wude
Witam,

Czy istnieje możliwość przyspieszenia działania funkcji mail()? Na serwerze VPS 1,5 Ghz, 768mb RAM mailing do 10 000 osób wykonywał się 28 minut i zajął ponad 90% użycia procesora, co wydaje mi się zbyt dużym obciążeniem.

Skrypt jest prosty i wygląda tak:
  1. //$maile - tablica z mailami
  2. //$wiadomosc - treść maila w HTML
  3. //$temat - temat maila
  4.  
  5. $naglowki = "Reply-to: admin <noreply@adres.com>\r\n";
  6. $naglowki .= "From: admin <noreply@adres.com>\r\n";
  7. $naglowki .= "MIME-Version: 1.0\r\n";
  8. $naglowki .= "Content-type: text/html; charset=utf-8\r\n";
  9.  
  10. for($i=0;$i<count($maile);$i++){
  11. mail($maile[$i], $temat, $wiadomosc, $naglowki);
  12. $i2 = $i+1;
  13. echo $i2.'. '.$maile[$i].': OK<br />';
  14. }


A może są jakieś szybsze odpowiedniki, niekoniecznie w PHP, ale działające na serwerze?

I jeszcze jedna sprawa... Czy takie mailingi do osób, które zaakceptowały ich otrzymywanie, mogą zacząć wpadać do spamu? Jeśli tak to jak się przed tym ustrzec?
Hekko
Oczywiście, mogło to tyle trwać. Przecież to jest około 6 maili na sekundę, nie spodziewaj się więcej. Jeśli masz 1 rdzeń tylko dostępny to 90% jest możliwe.
Możesz skorzystać z pear mail, lub phpmailer ale nie sądzę, że osiągniesz lepszy wynik.
Do spamu mogą trafić zawsze. Ważne są poprawne ustawienia dns (szczególnie revdns), zgodność danych nadawcy. Jeśli serwer odbiorcy np. stwierdzi, że wysyłałeś zbyt dużo wiadomości to może być block/spam - np. gdy z tych 10000 odbiorców 8000 to skrzynki wp.pl.
wude
dzięki za odpowiedź, sporo mi wyjaśniła.

Cytat(Hekko @ 23.01.2011, 12:56:43 ) *
Oczywiście, mogło to tyle trwać. Przecież to jest około 6 maili na sekundę, nie spodziewaj się więcej. Jeśli masz 1 rdzeń tylko dostępny to 90% jest możliwe.


ok, czas wysyłania nie jest bardzo ważny, ale co jeśli chciałbym wysłać 100k maili? Serwer wytrzyma? Można w jakiś sposób go odciążyć przez skrypt?
kalmaceta
- dzielisz na porcje tyle + cronjobs
- zlecasz firmie, która się tym zajmuje - mailingiem
- wykup dedya do tego (najlepiej)


Hekko
Możesz np. napisać skrypt który będzie wybierał 100 rekordów do wysyłki i odpalać co minutę właśnie z cronjobs. Wtedy mimo dłuższego czasu wysyłki będziesz miał mniejsze obciążenie. Do 100k nie trzeba jeszcze dedyka.
kalmaceta
może i nie trzeba, ale jeśli serwer jeszcze obsługuje inne skrzynki, jest serwer db, jest serwer www, przy mailingu wielokrotnym 100k zakładam , że nie jest to strona domowa,, średnio to widze ale nie wnikam,bo faktycznie może troche na wyrost.
Hekko
Masz rację, nie wiadomo co autor trzyma tam jeszcze. Ale jeśli to nie perfidny spam to nie powinno być problemu przy porcjowaniu wysyłki.
wude
Dzięki za odpowiedzi. Przy następnym mailingu wypróbuję metodę z cronjobs, ale przedtem muszę nadrobić braki w wiedzy na ten temat smile.gif

Na serwerze jest serwis generujący znaczne obciążenie, ale głównie w określonych godzinach, więc nie powinno być problemów.
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.