Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> boks z ilością maili na godzinę
amadeopl
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.12.2011

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


Witam, jestem początkujący w dziedzinie php ale łapę szybko.

Robię skrypt do wysyłania maili na phpmailer i mam taki problem.

Nie wiem jak zrobić pole w którym to by się wpisywało maksymalna ilość maili na godzinę, po prostu ogranicznik.

Proszę o wskazówki.

Zaznaczam że nie chodzi mi tu o sam box tylko o funkcje co ogranicza ilość maili na godzinę, jakiś dławik.

Z góry przepraszam za swoją niewiedzę i czekam na pomoc.

Pozdrawiam!


ps. wesołych świąt :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Dzięki - wesołych i radosnych wink.gif

Co do pytania - nie wiem jak dokładnie ma działać twój system ale możesz to zrobić na kilka sposobów.

Jeżeli zakładasz, że ma być wysyłane X maili na godzinę równomiernie to przydało by się uzyć funkcji sleep lub usleep i po prostu wrzucić jedną z nich pomiędzy wysyłanie maili określając w dość prosty sposób:

  1. $maili_na_godzine = 400; // przykładowa liczba
  2. $godzina = 60*60; //sekund
  3. $odstep_czasu = floor($godzina/$maili_na_godzine);
  4.  
  5. for(... [wszystkie maile] ...)
  6. {
  7. wyslij_maila($parametry[$i]);
  8. sleep($odstep_czasu);
  9. }


To tylko przykład - wystarczający na początek smile.gif

Można też do tego użyć cron'a ale wtedy można nie uzyskać równomiernej liczby wysyłanych maili na godzinę.

Dodatkowo trzeba założyć jakiś czas na samo wysłanie maila - kwestia przetestowania jak szybko dany serwer wysyła maile (wziąc na to poprawkę przy liczeniu odstepu wysyłania maili)

Dla wysyłania maili częściej niż raz na sekundę należy użyć funkcji usleep lub odpowiedniej - w sleep ułamki sekund nie działają wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zazwyczaj to się chyba raczej podaje ile maili ma wysłać przy danej wysyłce i jak często ma się odpalać ta wysłka.

np. wysyłka ma się odpalać co 5 minut i w czasie jednej wysyłki ma zostać wysłanych 10 maili


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Niektóre klasy mają nawet wbudowane narzędzia do limitacji np. swiftmailer.
Ogólnie temat już nie raz na forum, poszukaj.


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #5





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




Jak dla mnie to rozwiązania w oparciu o wszelkie sleepy są mocno ryzykowne, zwłaszcza w sytuacji gdy hosting "machluje", czyli ubija skrypt nie według czasu jego działania, ale momentu odpalenia. W ten sposób ubijają własnie procesy będące w uśpieniu, choć przecież nie obciążają one jakoś maszyny.

Najlepiej się tu wychodzi z CRONem. Piszesz skrypt tak, by paczkował co jakiś czas. Znając wielkość paczki i okres czasu, znasz przepustowość. Masz limit maili godzinny na serwerze? Odejmujesz jakieś 10-15% na zapas (rejestacje, zapomniane hasła itp.). Reszta to wybór albo okresu czasu (godzinna liczba cykli) albo wielkości paczki jako dzielnika.

Można co prawda robić skrypty rekurencyjnie odwołujące się do samych siebie, ale tu już zalecam ostrożność. Zły warunek stopu dla takiego i będzie sobie wisiał w pamięci aż do jego ręcznego ubicia wink.gif Na pewno jest to lepsze rozwiązanie niż te ze sleepem i o wiele pewniejsze, ale jednak ciut ryzykowne i nie powinny się za to brać osoby niedoświadczone, gdyż głupi błąd i będzie to wieczny skrypt wink.gif Za duża częstotliwość i zanim zdolamy ubić proces po PID, będzie on już miał swojego potomka. Tak jako ciekawostkę podam fakt, że na uczelni podczas zajęć na studiach na Linuxie wysłaliśmy na serwer uczelniany takowy skrypt, który powodowal wrzucanie na wszystkie konsole śmieci, a rekurencyjnie uruchamiał się co ułamki sekund. Wyniki poleceń w konsoli widziało się także ułamki sekund, więc wyniki trzeba było zapisywać na jakimś wyjściu, ale zanim skrypt przeanalizował je i próbował ubić proces pasujący do reguły, nie istniał on już, gdyż jego ciałem było wysypanie śmieci na ekran konsoli i uruchomienie kilku instancji samego siebie, bez żadnych sleepów. Oczywiście serwera nie można było ot tak sobie zresetować, więc do końca dnia nikt już nie miał zajęć pod konsolką wink.gif Tak więc trzeba bardzo uważać w tym wypadku bo sobie można serwer załatwić.

Inna sprawa to skonfigurowanie jako warstwy transportowej przykładowo programu sendmail. On dorzuci do swojej kolejki Twoje maile, ale jeśli będzie mial ją zawaloną, to mail może wyjść za 10-15 minut choćby, a Ty tak od razu dostaniesz komunikat powodzenia, gdyż przeciez do kolejki mail doda się pomyślnie.

EDIT: Tak... Swift mailer posiada takowe rozwiązanie, ale jakoś mnie ono nigdy nie przekonywało.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(thek @ 22.12.2011, 15:03:04 ) *
EDIT: Tak... Swift mailer posiada takowe rozwiązanie, ale jakoś mnie ono nigdy nie przekonywało.

To moja ulubiona klasa ale szczerze powiedziawszy mimo tego pluginu korzystam zwyczajnie z CRON'a.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 13:17