![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam portal, planuję zrobienie drugiego. Z czasem znacznie zwiększyła mi się liczba zarejstrowanych osób dlatego zastanawiam się nad zrobieniem massowego-mailingu. Problem w tym, że nie wiem jak to zrobić. Zakładając, że mam 10 tyś ludzi - i chcę wysłać do każdego z nich takiego samego maila. Odpalenie jednego skryptu często kończy się jego timeoutem. Nie moge forkować, uruchamiać programów. Jak wykonać czynność, która długo trwa i mieć pewność, że się wykonała? Wysłanie tych maili trochę trwa. Btw. używać mail() czy SMTP. Może moglibyście odesłać mnie do jakiegoś poradnika na ten temat? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 240 Pomógł: 13 Dołączył: 1.06.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Podziel to na paczki np. po 25 adresów i uruchamiaj cyklicznie cron'em w czasie mniejszego obciążenia serwera np. co minutę od 00 do 6 rano.
|
|
|
![]()
Post
#3
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
albo jak masz shell to odpalasz skrypcik z jego poziomu gdzie ustalasz że ma wysyłać po 25 maili 10sek przerwy i następna porcja
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź. Myślałem, że może jest jakiś inny sposób. Ale w takim razie zostanę przy cronie i paczkach po 25 maili.
|
|
|
![]()
Post
#5
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
crone bądź jak masz shell to z poziomu shella... skrypty wtedy nie maja żadnych ograniczeń co do czasu
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
No tak, wiem. Niestety nie mam dostępu do shella.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 153 Pomógł: 2 Dołączył: 28.05.2007 Skąd: Stamtąd Ostrzeżenie: (0%) ![]() ![]() |
A cron nie jest przypadkiem tylko na Linuxa? Bo już się pogubiłem w tym wszystkim.
Poza tym, wydaje mi się że jest sposób na zrobienie tego. Możesz sobie dodać te maile do tablicy (hłehłe, tablica z 10tys indeksów) i wysłać pętlą foreach. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
A cron nie jest przypadkiem tylko na Linuxa? Bo już się pogubiłem w tym wszystkim. Poza tym, wydaje mi się że jest sposób na zrobienie tego. Możesz sobie dodać te maile do tablicy (hłehłe, tablica z 10tys indeksów) i wysłać pętlą foreach. Wow, genialne, gratuluje pomysłu. Ja napisałem sobie fajny newsletterek i działa dość ładnie. Użyłem do tego PHP, MySQL oraz Ajax. Działa to tak: uruchamiam stronę, na której wpisuję treść maila itd. klikam na "Wyślij". Następuje zapis maila do sesji po czym uruchamiana jest Ajaxowa funkcja, która wywołuje skrypt PHP do wysyłania maili. Dodatkowo na tej nowej stronie tworzona jesy dynamicznie tablica adresów e-mailowych (w JS). Tworzona jest ona w JS dlatego, iż po serii testów zauważyłem, iż większość czasu potrzebnego na wysyłkę zabiera właśnie pobranie adresów z bazy (testowałem dla 100 000 maili (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ). No i ok. Ta Ajaxowa funckja przekazuje do skryptu PHP adres lub adresy, a skrypt PHP pobiera sobie dane maila z sesji i wysyła pod przekazane adresy. Potem robię setTimeout np. na 15 sekund i ponownie wywołuje funkcję Ajaxową. I tak do momentu rozesłania maili pod wszystkie adresy. Dodatkowo, co wg mnie jest przydatne, mam pasek postępu wysyłki mailingu oraz przybliżony czas do jego zakończenia. Co sądzicie o takim rozwiązaniu? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 153 Pomógł: 2 Dołączył: 28.05.2007 Skąd: Stamtąd Ostrzeżenie: (0%) ![]() ![]() |
Niezłe. Trochę skomplikowane, ale sposób fajny.
A "genialne, gratuluję pomysłu" - to było ironicznie?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dzięki.
Tak, to było ironiczne. Wyobrażasz sobie ile taki skrypt by się wykonywał? Jakby to obciążyło serwer? Twoje rozwiązanie jest najprostsze ale i, bez urazy, najgorsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Sprawdzi się jedynie przy niewielkiej liczbie adresów (do 100?). |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 153 Pomógł: 2 Dołączył: 28.05.2007 Skąd: Stamtąd Ostrzeżenie: (0%) ![]() ![]() |
Masz rację. To był głupi pomysł(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
A więc, podsumowując: nie da się tego zrobić samym PHP, trzeba użyć crona, shella albo AJAXA, tak? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A gdyby tak wysyłać po 10 meili przy każdym odświerzeniu strony przez odwiedzającego ? Zmienne licznika zapisywałoby się w bazie danych. Oczywiście istnieje możliwość, że moga się nie wysłać bo danego dnia nikt nie odwiedzi strony ale zawsze mógłbyś sprawdzić ile się do tej pory wysłało i np jeśli wysyłasz 1 meil raz na tydzien to po tygodniu dosłałbyś resztę ręcznie. To załatwia sprawę ajaxa, nie jest trudne do napisania. Może być za to kłopotliwe dla administratora. :/ No ale albo rybki albo akwarium.
@phpion.com mówisz że czekasz np 15 sekund na ponowienie. Ile zatem czekasz na wysłanie 100.000 meili ? Ten post edytował Black-Berry 13.06.2007, 19:07:32 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ja sobie wrzucam maile do kolejki potem cronem wyciagam z kolejki i wysylam po pare dopoki sie skrypt nie zerwie po wyslaniu kazdego zapisuje na ktorym mailu sie skonczylo wysylanie. Jak skrypt zostanie przez crona ubity to odpala sie jeszcze raz powiedzmy za 5 minut i sprawdza w ktorym momencie przestal i wznawia wysylanie.
Innej opcji niz cron czy proces pracujacy w tle w windows nie widze. Ten post edytował NoiseMc 13.06.2007, 19:49:02 |
|
|
![]()
Post
#14
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@phpion.com mówisz że czekasz np 15 sekund na ponowienie. Ile zatem czekasz na wysłanie 100.000 meili ? Czas oczekiwania był przykładowy, natomiast wysyłka jest organizowana w paczkach po X maili. Fakt, wysyłka takiej ilości przy paczce 1-elementowej trwałoby ponad dobę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (wedle szacowanego czasu podanego przez skrypt). |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
@phpion.com : pomysł z PHP i Ajaxem jest fajny, ale radzę Ci zastosowanie crona. Po pierwsze, podczas wysyłania tych 100k maili, użytkownik musi mieć ciągle otwartą przeglądarkę - przy takiej ilości maili to z pewnością będzie trochę trwało. Druga sprawa, to co gdy zerwie mu się połączenie, albo zawiesi komputer? Po trzecie, osobiście nie lubię takiego rozbijania zadań - w Twoim przypadku klient (użytkownik wysyłający mail) przejmuje cześć zadań serwera - zabiera trochę z logiki wysyłania maili. Po piąte, a co gdy ktoś nie obsługuje JS i/lub ActiveX. Po szóste to bardzo skomplikowana metoda (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Oczywiście nie obrażaj się, bo samo w sobie to bardzo fajne zastosowanie Ajaxa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jednak moim zdaniem to jak strzelać z bazooki do komara i to bazzoki z celownikiem laserowym (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) No, ale widać, że masz JS w jednym palcu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ja zostane przy cronie - bo jest prosty w obsłudze i nie trzeba się praktycznie niczym martwić. Dzięki za pomoc wszystkim |
|
|
![]()
Post
#16
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ha! Nie opisałem w poście kilku bajerków, tj.:
- należy mieć włączoną przeglądarkę - to fakt. Ale można mieć ją zminimalizowaną, a w pasku tytułu widoczny jest pozostały czas do zakończenia wysyłki - w każdej chwili można spojrzeć - mam również przycisk 'Wstrzymaj', który wstrzymuje wysyłanie wysyłki w dowolnym momencie. Równocześnie do tabeli 'sent' są zapisywane dane jaki mail poszedł pod jaki adres. Można więc w banalny sposób (poprzez zapytanie SQL) wybrać te numery, do który mail nie został jeszcze wysłany i dokończyć wysyłkę w dowolnym momencie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cron takiej opcji nie daje - wysyła w tle i tyle. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 12:03 |