Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sposób] masowy mailing, Zastanawiam się nad możliwościami rozwiązania pewnego problemu.
smut
post 11.06.2007, 23:12:13
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?


--------------------
dobry kredyt
Go to the top of the page
+Quote Post
LonelyKnight
post 11.06.2007, 23:20:36
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.


--------------------
Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot...
Go to the top of the page
+Quote Post
kwiateusz
post 11.06.2007, 23:32:09
Post #3


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
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
Go to the top of the page
+Quote Post
smut
post 13.06.2007, 00:23:26
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.


--------------------
dobry kredyt
Go to the top of the page
+Quote Post
kwiateusz
post 13.06.2007, 00:33:31
Post #5


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
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
Go to the top of the page
+Quote Post
smut
post 13.06.2007, 00:38:52
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.


--------------------
dobry kredyt
Go to the top of the page
+Quote Post
Glarden
post 13.06.2007, 15:57:49
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.


--------------------
Raz, dwa, trzy, baba Jaga patrzy!
http://trelemorele.cba.pl
Go to the top of the page
+Quote Post
phpion
post 13.06.2007, 16:14:08
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Glarden @ 13.06.2007, 16:57:49 ) *
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 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?
Go to the top of the page
+Quote Post
Glarden
post 13.06.2007, 16:18:43
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?smile.gif


--------------------
Raz, dwa, trzy, baba Jaga patrzy!
http://trelemorele.cba.pl
Go to the top of the page
+Quote Post
phpion
post 13.06.2007, 17:13:25
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 smile.gif Sprawdzi się jedynie przy niewielkiej liczbie adresów (do 100?).
Go to the top of the page
+Quote Post
Glarden
post 13.06.2007, 18:21:39
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łsmile.gif
A więc, podsumowując: nie da się tego zrobić samym PHP, trzeba użyć crona, shella albo AJAXA, tak?


--------------------
Raz, dwa, trzy, baba Jaga patrzy!
http://trelemorele.cba.pl
Go to the top of the page
+Quote Post
Black-Berry
post 13.06.2007, 19:02:11
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


--------------------
Go to the top of the page
+Quote Post
NoiseMc
post 13.06.2007, 19:48:22
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


--------------------
Go to the top of the page
+Quote Post
phpion
post 13.06.2007, 19:57:05
Post #14





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Black-Berry @ 13.06.2007, 20:02:11 ) *
@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ę biggrin.gif (wedle szacowanego czasu podanego przez skrypt).
Go to the top of the page
+Quote Post
smut
post 14.06.2007, 07:42:26
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 winksmiley.jpg


Oczywiście nie obrażaj się, bo samo w sobie to bardzo fajne zastosowanie Ajaxa smile.gif Jednak moim zdaniem to jak strzelać z bazooki do komara i to bazzoki z celownikiem laserowym winksmiley.jpg No, ale widać, że masz JS w jednym palcu smile.gif

Ja zostane przy cronie - bo jest prosty w obsłudze i nie trzeba się praktycznie niczym martwić.

Dzięki za pomoc wszystkim


--------------------
dobry kredyt
Go to the top of the page
+Quote Post
phpion
post 14.06.2007, 08:16:10
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 smile.gif Cron takiej opcji nie daje - wysyła w tle i tyle.
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 Wersja Lo-Fi Aktualny czas: 6.07.2025 - 06:21