Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mailing na ovh-10000 maili dziennie
kaznodzieja
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 28.01.2007

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


Witam!

Posiadam serwer wirtualny na ovh. Mam na nim dostęp do crona z najczęstszym wywołanie co godz. Chcę wysłać około 10 000 maili dziennie. Problem w tym że ovh udostępnia tylko funkcje mail() i blokuje SMTP(PhpMailer nie działa). Czy ktoś ma pomysł jak zorganizować taka wysyłkę maili z wykorzystaniem crona i bez robienia paczek. Czy skrypt który będzie miał 500 razy wywołana funkcje mail nie spowoduje zablokowanie konta lub przeciążenia serwera?
Go to the top of the page
+Quote Post
Dumdas
post
Post #2





Grupa: Zarejestrowani
Postów: 65
Pomógł: 7
Dołączył: 8.10.2009
Skąd: Lubin

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


Wątpię, żeby to przeciążyło serwer...
A jak:
mail($do, $temat, $tresc); wywołane x razy i tyle.
Go to the top of the page
+Quote Post
cakper
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 10.10.2009
Skąd: Cieszyn / Gliwice

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


Jednym z rozwiązań jest kolejkowanie maili np w bazie danych, następnie odpalanie z crona skryptu do wysyłania np co 5 min i z każdym wywołaniem pobierać z bazy i wysyłać np 50 maili. Powinno przejść a dodatkowo będziesz miał dość skalowalny system (np możesz wysyłać maile z kilku serwerów i będą korzystały tylko z jednej bazy).
Taka jest moja sugestia (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Myślę, że przy takim odświeżaniu najlepiej zrobić sobie skrypt odpalający sam siebie. Za jednym uruchomieniem cron i standardowym czasem trwania skryptu 30 sekund poślesz może 200-500 maili, zależnie od tego co w mailingu robisz i jak obrabiasz treść. Przy 24 odpaleniach na dobę moższ nie uzyskać 10k maili. By to osiągnąć musisz obejść 30 sekundowy limit trwania skryptu. Nawet na forum tu kiedyś pisałem prawie gotowca jak to zrobić. Chodzi o to, by skrypt po wysłaniu iluś maili uruchamiał sam siebie jako "nowy wątek" a stary zamykał. Robiłby to tak długo, aż nie zakończyłby wysyłki. A to czy wysłałby 1.000 czy 100.000 to już nieważne dla niego. Istotną wadą tego rozwiązania jest niemożliwość zatrzymania tego skryptu w zasadzie inaczej niż użycie kill w powłoce lub restart usługi, więc to ryzykowne zagrane bez dokładnego sprawdzenia i przemyślany warunek STOP jest tu niezbędny bo inaczej zajedziesz serwer.

@Capker... Przeczytaj posta kolegi dokładnie... Ma Crona do wywołania co godzinę jedynie a nie co 5 minut. Takie kolejkowanie więc nie ma sensu, bo 50 maili co godzinę nie zda egzaminu. Skrypt musi być uruchomiony raz, ale nie może zostać zatrzymany po 30 sekundach przez serwer jako "nie odpowiadający" czy "zawieszony". Może zajść sytuacja, że będzie musiał pracować kilka minut, na co niemal żaden usługodawca nie pozwala. Tak więc rozwiązanie z wywoływaniem rekurencyjnym skryptu jest moim zdaniem jednym z nielicznych, o ile nie jedynym jakie dało by radę to zrobić.

Ten post edytował thek 11.10.2009, 10:18:13
Go to the top of the page
+Quote Post
kaznodzieja
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 28.01.2007

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


thek pomysł całkiem ciekawy tylko jak pisałeś dość ryzykowny! Jak dla mnie wadą jest to że nie umiem pisać w obiektach. Pamiętasz może gdzie pisałeś o tym prawie gotowcu, a może masz sprawdzone i działające takie rozwiązanie?

Dumdas no właśnie wydaje mi się że mogło by to przeciążyć bo przecież to by było wywołanie kilku jest funkcji w prawie jednoczesnej chwili. A po za tym możliwe że jest ograniczenie ilość wysyłanych wiadomości jednocześnie.
Go to the top of the page
+Quote Post
cakper
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 10.10.2009
Skąd: Cieszyn / Gliwice

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


thek, sorry - mój błąd (IMG:style_emoticons/default/winksmiley.jpg) biję się w pierś
Go to the top of the page
+Quote Post
kaznodzieja
post
Post #7





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 28.01.2007

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


A czy takie rozwiązanie jest dobrym pomysłem. O północy tworze liste maili do wysłanie. Co godzine wywołuje crona i wysyłam po 100 maili a po nich wywołuje funkcje
usleep(10000000); // czeka 10 sek

Szukając po sieci nalazłem http://www.webcron.pl/. Zewnętrzny cron tylko że serwis wstrzymał działaność, a czy znacie darmowego takiego crona?
Go to the top of the page
+Quote Post
cakper
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 10.10.2009
Skąd: Cieszyn / Gliwice

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


Apropo pomysłu podanego przez Ciebie to możesz skorzystać z dowolnego serwera posiadającego crona (np od znajomego (IMG:style_emoticons/default/winksmiley.jpg) ) i tam wymuszać wywołanie twojego skryptu np przez ściągnięcie go (coś ala "wget www.domena.pl/adres_skryptu.php").

Z usleepem też można spróbować, głupie to nie jest.
Go to the top of the page
+Quote Post
Dumdas
post
Post #9





Grupa: Zarejestrowani
Postów: 65
Pomógł: 7
Dołączył: 8.10.2009
Skąd: Lubin

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


google nie gryzie....
pierwszy wynik przy "cron free":
online cron jobs
Go to the top of the page
+Quote Post
thek
post
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Pomysł jest ryzykowny, ale dobrze zaprogramowany skrypt sam się zatrzyma. Podstawa to dobry warunek zatrzymujący "wątki". Ja miałem to zrobione tak, że po uruchomieniu pobierałem paczkę danych do mailingu, usypiałem skrypt na ileś sekund (by nie zajeżdżać serwera), a po obudzeniu robiłem co trzeba i wywoływałem nowy, stary jednocześnie killując. Sztuczka polegała na tym, że każdy w mailingu miał flagę w postaci daty. Jeśli skrypt kogoś przerobił, temu flaga się ustawiała na datę aktualną, niezależne czy maila wysyłał czy nie. A paczki nowe pobierał tylko spośród tych, którzy ową datę mieli inną niż aktualna. W ten sposób liczba stale się zmniejszała, aż nie było nikogo z inną datą niż aktualna. W tym momencie skrypt sam się zatrzymywał. I tak też w owym poście opisałem to rozwiązanie, ale gdzie on jest to niestety musiałbym w "Szukajce" pogrzebać (IMG:style_emoticons/default/smile.gif)
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: 20.09.2025 - 14:10