![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Planuję stworzenie newslettera, w związku z tym zastanawiam się nad metodą samego wysyłania maili. Przeglądałem wątki na forum, w których ten temat był już poruszany, jednak nie znalazłem jednoznacznego, właściwego rozwiązania problemu. Informuję z góry, że interesuje mnie newsletter na powiedzmy kilkanaście tysięcy adresów. Adresy będą przechowywane w bazie MySQL. Co więcej, ma to być robione nie z maszyny stojącej u mnie, a z wykupionego konta hostingowego. Z tego co czytałem, w grę wchodzą następujące rozwiązania: - skrypt pobierający kolejno adresy z bazy i wysyłający maile - problemem jest max. czas wykonywania skryptu - wątpię, że zdąży mi się wysłać te kilkanaście tys. maili - Cron - jednak czy admin serwera się nie "podirytuje" faktem, że raptem jakiś proces obciąża mu na maxa maszynę i łącze i go nie wyrzuci? Kolejna sprawa to możliwość wykorzystania pola BCC. Nie wiem jednak na ile jest to skuteczne, ile adresów maksymalnie da się wpisać, itp. Zwracam się z uprzejmą prośbą do bardziej doświadczonych o pomoc w wyżej opisanej kwestii, na pewno nie jeden (jedna ![]() -------------------- Pozdrawiam,
MarcZ |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Jednorazowo możesz mieć problem z wysłanie kilku tysięcy. Można to jednak obejść.
Po prostu podziel wysyłanie maili z bazy danych np. po 100 jednorazowo. Wtedy powinno być ok. Nie musisz sam odświeżać strony. Mogą to za ciebie robić odwiedzający i każdorazowo wysyłać kilka/kilkaset przy wejściu. Oczywiście tazkie rozwiązanie jest maksymalnie chamskie, więc nie polecam. Cron? No można, o ile serwer na to pozwoli i ten newsletter będzie miał kilka informacji dziennie. Do takich działań polecam stworzenie sobie własnego serwera, ewentualnie zakup jakiegoś drogiego, gdzie możesz sobie poszaleć. W BCC masz to samo, co z wysłaniem pojedyńczo (oszczędzasz tylko na wywoływaniu funkcji wysyłającej). -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Jedyne sensowne rozwiązanie, które mi przychodzi go głowy to oszacować liczbę maili, która na pewno zostanie wysłana w ciągu jednego wywołania skryptu (np. 50) i zastosować taki algorytm:
- w panelu administracyjnym klikamy "Wyślij newsletter" ![]() - skrypt wysyła do pierwszych 50 osób (powiedzmy, że wykorzystuję BCC, więc powiedzmy 50x5=250 osób) odznaczając w bazie, że do tych osób już newsletter poszedł - sprawdza czy newsletter został wysłany do wszystkich - jeżeli nie to JSem przekierowuję przeglądarkę pod odpowiednio spreparowany adres, który znów zainicjalizuje wysyłanie do kolejnych 250 osób; jeżeli tak to sobie gdzieś odznaczam, że newsletter został wysłany Jeżeli macie jakieś inne pomysły to serdecznie zapraszam do dyskusji ![]() A może pójść po najmniejszej linii oporu i wykorzystać np. CcMail. Akurat ten system wydał mi się najrozsądniejszy sposród wszystkich, które przejrzałem. Przy okazji polską nakładkę może by się zrobiło... ![]() -------------------- Pozdrawiam,
MarcZ |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 422 Pomógł: 0 Dołączył: 14.12.2005 Skąd: Wałbrzych Ostrzeżenie: (0%) ![]() ![]() |
ustalamy limit wiadomosci wysylanych za jednym razem i refresh ( header + location ) w ktorym podany jest id od ktorego ma zostac zaczeta nowa kolejka wysylania maili i po sprawie
![]() -------------------- Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
najpierw w zmiennej powiedzmy $exec_time spradzaj makszymalny czas wykonania, i zmienna $executed w kturej bedzie time(),
potem zrob FOR loop co bedzie wysylac majla po jednym, w po kazdym wyslaniu maila sprawdzaj roznice time() z $executed, jak ta wartosc dojdzie do okolo 2 secundy mniej niz $exec time, przerwij wysylanie za pomoza die(), i zachowaj wartosc $i z FOR loop, i za nastepnym wywolaniem strony wysylaj od maila number $i az skonczysz wszytko. aha i jeszcze jedno, ta metoda jest lepsza od wysylania 50 maili za jednym zamachem bo filtry spam-u nie wychwyca to Ten post edytował nasty_psycho 15.06.2006, 09:23:48 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
aha i jeszcze jedno, ta metoda jest lepsza od wysylania 50 maili za jednym zamachem bo filtry spam-u nie wychwyca to Nie bardzo rozumiem - chodzi Ci tu o wysyłanie w polach BCC? Wielkie dzięki za porady, przy okazji mam jeszcze jedno pytanie - na ile jest to efektywne w praktyce? Rozumiem, że w dużej mierze wydajność takiego rozwiązania zależy od parametrów serwera i złożoności skryptu, ale mimo wszystko jestem bardzo ciekaw jak to się sprawuje w praktyce - może ktoś z własnego doświadczenia mógłby podać chociażby szacunkową ilość wysyłanych maili na minutę? -------------------- Pozdrawiam,
MarcZ |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie bardzo rozumiem - chodzi Ci tu o wysyłanie w polach BCC? Na wiekszosci majli sa filtry spam, i jak jest wiecej niz jaks liczba adresantow to blokuje (wstawja to folderu z spam,junk itd) a jak wysylasz po jednym to sie system nie zorientuje. a co do skutecznosci to nie probowalem ale mysle ze bedzie dzialac |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
A oto moja wersja rozwiązania tego problemu,
jak zwykle niekonwencjonalna, ale sam ją zastosowałem u siebie i zdaje egzamin, teoretycznie można by wysłać w pętli 20000 maili jednak został by przekroczny czas wykonania skryptu dlatego zamiast petli przekazywana zostaje zmienna poprze GET, która za każdym wywałoniem zostaje zwiększona, a oto kawałek kodu:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Dzięki php programmer, ale zostanę jednak przy koncepcji nasty_psycho - czyli przy jednym wykonaniu skryptu wysyłam X maili dbając o to, aby nie przekroczyć max. czasu wykonania skryptu.
Napisałeś, że zdaje to u Ciebie egzamin, a możesz powiedzieć jak jest z efektywnością takiego rozwiązania (np. ile orientacyjnie jesteś w stanie wysłać maili w ciągu minuty)? -------------------- Pozdrawiam,
MarcZ |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
No tak wadą jest szybkość, to jeszcze zależy od różnych rzeczy,
np obciążenia serwera itp, ja mam zazwyczaj koło 1000 razy to mi zajmuje od 20 do 30 minut, wtedy po prosu zostawiam kompa lub robie jakieś inne zadanie na kompie, kiedyś przerobiłem skrypt aby jednorazowo wysylał nie 1 a 10 maili ale nie zwiększyło to wielce wydajności. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem test, na serwerze firmy hostingowej, z której usług aktualnie korzystam, składał się z:
- połączenia z bazą - wykonania zapytania - pobrania wiersza - wysłania maila - zamknięcia połączenia Czas wykonywania skryptu oscylował od 0.04 do 0.18 sek, przeciętnie w granicach 0.1 sek. Oczywiście połącznie z bazą i zamknięcie połączenia z bazą nie będą wykonywane przy każdym mailu, a raz na wykonanie skryptu, więc można test został zrobiony trochę "na zapas". Dajmy na to, że pełne wysłanie jednego maila zajmie nawet 0.2 sek, to w ciągu max. czasu wykonania skryptu (na tym serwerze to 50 sek.) mamy 250 maili. Wydaje mi się więc, że w tym przypadku spokojnie można przyjąć 250 maili/min, więc 1k maili w 4min. Dziwi mnie więc, że u Ciebie wysyłanie 1k maili trwa 20-30 min, skąd ta różnica? Oczywiście jeżeli wysyłasz to z serwera, który stoi w domu to nie było pytania ![]() W sumie masz rację, wysyłanie X maili w trakcie wykonania skryptu nie zawsze musi przynieść wymierne rezultaty w postaci zwiększenia efektywności, ale ja osobiście wolę jednak, mimo wszystko, optymalizować co się da (w granicach rozsądku oczywiście ![]() -------------------- Pozdrawiam,
MarcZ |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Różnica jest stąd że twoje wyliczenia to teoria o mój skrypt, którego używam to praktyka.
Myśle że dużo czasu zabiera przeładowanie strony, więc możesz np spróbować żeby przy jednym przeładowaniu wysyłał jednocześnie 100 maili. Acha no i jeszcze jedno, skrypt był wykonywany na localhost na moim kompie. Ten post edytował php programmer 15.06.2006, 19:45:12 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
takie dzialania jak wykonywanie polaczenia z baza danych zamykanie zapytanie etc nie sa liczone do czasu wykonania skryptu tak przynajmniej wyczytalem przy okazji czytania o set_time_limit()
Cytat The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 28.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
Działanie mojego mailingu:
1. Wysyla maila do pierwszych X maili, zaznaczam, ze do nich juz poszlo. 2. Przekierowuje, jesli są maila do ktorych jeszcze nie poszlo to powtarzam krok 1. I tak do wyczerpania maili. Teraz jest tylko jeden problem, komunikat: "Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie." I oczywiscie maila nie idą do wszystkich, bo skrypt kończy działanie. Jak to rozwiązaliscie wy, jak to poprawić? |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 16.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mój sposób jest następujący:
skrypt pobiera z bazy paczke maili 25 z około 15000 następnie wysyła w pętli 25 maili whilem mail() po wykonaniu tego refresh ze zmienna ktora przy nastepnym wyznaczy od ktorego miejsca pobierac nowe 25 maili i tak wkolko. 2500 Maili około 30 minut ale działa |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 7.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
sorry, ze odswiezam, ale mam ten sam problem lecz:
- opcja z set_time_limit() nie wchodzi u mnie w gre - zostala opcja @php programmer, jednak dziala ona tylkow IE, w firefoxie (nie wiem jak w innych) wyskakuje "Nieprawidłowe przekierowanie. Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie." i konczy dzialanie scryptu... moje ktos wie jak to obejsc? ![]() Ten post edytował prolam 6.09.2006, 10:55:48 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Może by tak po prostu poinformować czytelników o czymś takim jak RSS?
![]() -------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Może by tak po prostu poinformować czytelników o czymś takim jak RSS? ![]() No wybacz, ale to strona ma być dostosowana do użytkownika, a nie vice versa. Jeśli uzytkownik chce dostawać maile to trzeba mu stworzyć taką możliwość. Im więcej kanałów informacyjnych tym lepiej. Ale wbrew pozorom nie zawsze. Osobiście jestem przeciwnikiem RSS dla małych portali i stron. Użytkownik zamiast wchodzić na moją stronę, sprawdzać czy jest coś nowego i oglądać reklamy, czeka aż pojawi się to w RSSie, przez co trace odsłony. A teman mailingu był wałkowany tysiąc razy, za każdym podobne wniski: porcjowanie na małe paczki, których wielkość trzeba sobie dostosować to mocy serwera i przepustowości łącza. -------------------- |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 7.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Osobiście jestem przeciwnikiem RSS dla małych portali i stron. Użytkownik zamiast wchodzić na moją stronę, sprawdzać czy jest coś nowego i oglądać reklamy, czeka aż pojawi się to w RSSie, przez co trace odsłony. W takim razie lepiej zabijać serwer mailami? RSSy możesz pogodzić z wysoką odwiedzalnością, umieszczając w feedach np. pierwsze dwa akapity wiadomości. Użytkownik wejdzie na stronę, aby przeczytać resztę i obejrzeć ewentualne komentarze, natomiast nie będzie musiał odwiedzać Twojej strony codziennie aby sprawdzać, czy coś nowego się przypadkiem od wczoraj nie pojawiło. Zresztą sam sobie odpowiedz na pytanie: Czy potrafiłbyś obecnie żyć bez RSS-ów? Ja nie. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 11:17 |