![]() |
![]() ![]() |
![]() |
![]()
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
|
|
|
![]()
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... |
|
|
![]()
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
|
|
|
![]()
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
|
|
|
![]()
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
|
|
|
![]()
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
|
|
|
![]()
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 |
|
|
![]()
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 ![]() 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? ![]() -------------------- Raz, dwa, trzy, baba Jaga patrzy!
http://trelemorele.cba.pl |
|
|
![]()
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 ![]() |
|
|
![]()
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ł
![]() 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 |
|
|
![]()
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 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
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ę ![]() |
|
|
![]()
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
![]() Oczywiście nie obrażaj się, bo samo w sobie to bardzo fajne zastosowanie Ajaxa ![]() ![]() ![]() Ja zostane przy cronie - bo jest prosty w obsłudze i nie trzeba się praktycznie niczym martwić. Dzięki za pomoc wszystkim -------------------- dobry kredyt
|
|
|
![]()
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 ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 06:21 |