Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja mail() i wyslanie 10 tys. maili
Forum PHP.pl > Forum > PHP
mikemat
witam!!!

mam prosbe o opinie, klient chce zaczac rozsylac newsletter i bedzie On dochodzil do okolo 10 tys. prenumeratorow.

Chce do tego wykorzystac funkcje mail()


Zastanawiam sie czy wysylac calosc za 1 zamachem, czy np. dzielic na paczki po 1000 adresow, prosze o opinie, chodzi mi o obciazenie serwera czy przy takiej ilosci moze nie wydolic.


dziekuje.
silent
Lepiej dzielić na paczki ze względu na filtry antyspamowe. Jeśli wyślesz 1 mail do zbyt wielu odbiorców to po prostu serwer to zablokuje.
mikemat
jestem w tej komfortowej sytuacji, ze to moj wlasny serwer i w miare mocny 2,8Ghz Xeon, 1 GB ram, 120 GB HDD i stoi na bardzo szybkim laczu, wiec z antyspamem tutaj akurat nie bedzie problemu.


zastanawiam sie jeszcze czy wrzucic wszystkie wiadomosci do 1 maila - do pola BCC: zeby pozostali userzy nie widzieli maili innych, czy tez posylac do kazdego indywidualnego maila wywolujac 10 tys. razy mail()


jak bedzie wydajniej ? ohmy.gif
Parti
Oczywiście wrzucenie wszystkich adresatów do pola BCC będzie wydajniejsze.
matid
Cytat(Parti @ 2004-09-13 13:50:07)
Oczywiście wrzucenie wszystkich adresatów do pola BCC będzie wydajniejsze.

A czy serwery SMTP nie mają jakiegoś ograniczenia co do ilości adresów w polu BCC?
mikemat
a czy serwery nie beda odrzucaly maili w ktorych inne (lub puste) jest pole TO: i BCC questionmark.gif?
Kuziu
Cytat
Lepiej dzielić na paczki ze względu na filtry antyspamowe. Jeśli wyślesz 1 mail do zbyt wielu odbiorców to po prostu serwer to zablokuje.


Cytat
jestem w tej komfortowej sytuacji, ze to moj wlasny serwer i w miare mocny 2,8Ghz Xeon, 1 GB ram, 120 GB HDD i stoi na bardzo szybkim laczu, wiec z antyspamem tutaj akurat nie bedzie problemu.


silent'owi ... chodziło o to że server przyjmujący (np. z tych 10.000 mail'i 1.000 pójdzie na Onet.pl a server onetowski), wykrywając że przez ostatnią minute 300 mail'i przyszło od 1 nadawcy może potraktować je wszystkie jako spam ... kasując te co już doszły i blokując te, które właśnie idą.
squid
przede wszystkim radze wysylac majle pojedynczo w petli, dodatkowo musisz wziac pod uwage ograniczenia czasu wykonywania skryptu na Twoim serwerze oraz zeby sie nie zapchal procesem wysylania uniemozliwiajac kozystanie z innych uslog. W razie potrzeby mozesz wysylac w paczkach np. po 100 maili. Co do ochrony anty spamowej mozesz pomieszac domeny adresatow tak zebys nie wysylal 1000 maili tylko pod onet, moesz tez skorzystac z aliasow nadawcy i wybierac je losowo moze filtr sie nie polapie
NuLL
A moze klasa mail z pakietu PEAR ? To jest propozycja, bo nie znam dokladnie jej sposobu dzialania sad.gif Ale wiem ze dzieki niej mejle z zalacznikami mozna bez problemu wyslac i mejle w formacie HTML smile.gif
Lukasz Luczak
Witam,

Jeśli to jest Twój własny serwer to polecam:

1) skorzystać z crona - jeśli ten serwer stoi na *nix
2) jakikolwiek programik w C, który wywoła kod php co określony czas - jeśli ten serwer to Win

Większosć serwerów SMTP ma ograniczenia antyspamowe - wyłączając te ograniczenia narażasz sam siebie na zapchanie Twoich skrzynek (bo serwer przyjmie także masowe maile do Ciebie).

Kolejan sprawa to tak, że ograniczenie wielkości nagłówka maila to 30 kb - czy coś koło tego. A w praktyce oznacza to mailing do około 1000 osób - choć czasami mniej - weim bo sam wysyłałem takie mailingu. Oczywiście niektóre serwery pozwalają przekroczyć ten rozmiar nagłówka ale niestety często mają z tym problemy.

Dodatkowo przy jednej wysyłce jest duże ryzyko propagacji błędu - jeden błędnie zapisany adres w nagłówku może popsuć całą wysyłkę.

Kolejna sprawa - jeśli do wysyłki używasz sendmail'a (a tak sie profesjonalnie robi, jeśli SMTP którego używasz to ten z serwera - przeważnie) to do każdego wysłanego maila jest dopisywane info czyli sygnaturka wysłania - kto i kiedy wysłał. Inne serwery tą sygnaturkę odczytuja i mogą na jej podstawie uznać Twój mail jako spam. Tą opcję możesz wyłączyć i nie będzie tycch dodatkowych sygnaturek.

Podsumowując:
Przy pojedyńczym wysłaniu masowym maili czyli wiele maili wpisanych jako BCC (ukryte do wiadomości) mogą pojawić się duże problemy.

Polecam jednorazową wysyłkę nie większą niż 100 maili. A kolejne wysyłki co około10-20 minut.

Powiedzenie, że masz szybki serwer nic nie znaczy - jeśli to jest serwer takze www to ma ograniczone pasmo transferu - robiąc masową wysyłkę do tysiaca użytkowników sprawiasz, że przez pewien czas serwer www staje się niemal niedostępny bo pasmo jest całe wykorzystane. Mimo iż procek wskazuje tylko 10% zużycia to serwer jest bezużyteczny.


Dlatego też ja proponuję Ci zrobić podobnie jak ja ostatecnzie wykonałem sprawę i do wysyłek subskrypcji i mailingów używam crona. W bazie danych wpisuje info co ma być wysłąne a skrypt odpalany z crona robi wysyłkę. Dzięki temu zużycie pasma jest w miarę równomierne i ... jeśli pomylę się i coś źle wyślę to mam duże szanse na cofnięcie tego.

Pozdrawiam,

ps: proszę nie mieszać mnie z błotem jeśli któreś informacje według Was są niepełne/nieprawdziwe, jak wiadomo serwer serwerowi nierówny a ja opisywałem sytuację jaka dotyczy serwerów na których ja pracowałem
mikemat
dzieki za odpowiedz

zaczalem wysylac paczki po 500 maili - kazdy mail to wywolanie funkcji mail(), ale...

sprobowalem wyslac 9000 maili na raz - mialem troche ponad 10.000 do wysylki - i dziwo poszlo bez problemu, serw mielil to przez okolo 50 sekund, ale przeszlo.


piszac o pasmie masz na mysli lacze na jakim stoi maszyna questionmark.gif? - mysle, ze tutaj tez nie ma problemu bo to 2 x 1GB


dzieki za uwage dot. naglowkow, zaraz wywale je smile.gif
hi-Res
Nie jetem pewnien, ale może coś w tym stylu?
  1. <?php
  2.  
  3. while ( $users_email = mysql_fetch_assoc($users_email_request) )
  4. {
  5. $naglowek .= &#092;"Bcc: <\".dekoduj_email($users_email['email']).\">rn\";
  6. }
  7.  
  8. mail('\"Użytkownicy serwisu\"<usluga@domena>',&#092;"$temat\",\"$wiadomosc\",\"$naglowek\");
  9.  
  10. ?>

To pomoże wysłać sporą liczbę maili za jenym razem. Nie jestem mistrzem w rozsyłaniu 1000 maili na raz, ale metoda sprawdza sie w przypadku newsletterow z liczbą ok 200 userów.

Przynajmniej spróbowałem coś doradzić.
scanner
Przeniesione: php Pro => php
Pucy
Cytat(Lukasz Luczak @ 25.09.2004, 20:06:49 ) *
Polecam jednorazową wysyłkę nie większą niż 100 maili. A kolejne wysyłki co około10-20 minut.


Wszystko fajnie, dobre uwagi, itd... ale wysylanie 100 maili co 10-20 minut gdy trzeba wyslac wiadomosc dnia do 100 tys osob z wiadomoscia dnia lub, jaka kolwiek inna wiadomocia zajmie... 16 godzin... czy aby napewno jest to dobre rozwiazanie? zwlaszcza ze liczba 100 tys jest tą dolna granicą... Wiec jak nalezy to robic przy maksymalnie duzej bazie aby serwery nie wylapaly spamu ani sie nie poblokowaly....

Mysle ze rozwiazaniem moze byc nieuzywanie funkcji mail(); jako takiej tylko uzyc jakiej klasy do wysylania z smtp zewnetrzmnych skrzynek (stworzenie bazy 10,50) nawet skrzynek, ktorych to dane wklepujemy do tablicy i lecac w petli, wysylac paczki 100-300 (tak spoko), nastepnie zmieniac serwer wychjodzacy w odstepach kilkusekundowych, w momencie wyczerpania limitu stworzonych przez nas kont (10-50) czekamy moze te wspomniane 10 minut (chociaz mysle ze nie musimy) i wysylamy dalej, na pewno przyspieszy to dzialanie mailingu i nie pozwoli na zablkowanie skrzynek....

Co myslicie o tym pomysle? Ja chyba biore sie za jego wdrazanie, algorytm jest prosty, wydajnosc tez chyba dosc dobra, ale nie znam sie na mechanizmach skrzynek pocztowych tak wiec moge sie mylic w pewnym stopniu..

Pozdrawiam.,..

P.S. sory za odgrzebanie tematu, ale mozna go pociagnac, a nic innego nie bylo ^^
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.