![]() |
![]() ![]() |
![]() |
![]()
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. -------------------- |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
prolam, faktycznie, przeczytałem cały temat nie patrząc na daty. Moja odpowiedź: zrób przekierowanie w meta, a nie w JS.
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. Ale ja tego właśnie chce. Chce przyzwyczaić moich użytkowników, żeby odiwedzali moją stronę codziennie, a nie tylko wtedy kiedy ich coś w RSSie ich zainteresuje. Nie ważne czy coś się pojawiło czy nie. Mają odwiedzic i oglądnąć reklamy. Sam mówisz, że nie potrafisz żyć bez RSSów, ja chce, żeby nie potrafili zyć bez mojej strony, bo w RSSie nie upcham reklamy. P.S. Sam nie subskrybuje ani jednego RSSa, za wyjątkiem wykopu i spokojnie poradziłbym sobie bez niego. -------------------- |
|
|
![]()
Post
#22
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Moje pomysl jest nastepujacy: Akcja Napisz Wiadomosc: 1. Formularz wiadomosci. W bazie zapisuje tytul, tekst, id_subskrypcji. Tabela ta zawiera jeszcze id_ostatniego_subskrybenta (do ktorego wyslano maila). 2. przekierowanie na akcje Wysylanie. Akcja Wysylanie: dwa ajaksy 1. progress bar - pyta serwer ile wyslano/ile pozostalo - na tej podstawie wyswietla pasek postepu. 2. czy nalezy odswiezyc akcje wysylajaca akcja wysylajaca: 1. usun flage TRZEBA_ODSWIEZYC = false 2. pobierz 100 nastepnych subskrybentow 3. wysli im maile jezeli sa jeszcze jakies maile do wyslania 4. ustaw flage TRZEBA_ODSWIEZYC = true jezeli nie: wyslij maila do osoby wysylajacej, ze newsletter zostal rozeslany. akcja Wysylanie jak na pasku dojdzie do 100% to, zamyka okno. Adrian. |
|
|
![]()
Post
#23
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 25.10.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ja kwestie newslettera rozwiązuję następująco:
1. W formularzu wpisuję temat i treść maila 2. Po submicie pobieram wszystkie adresy e-mail na które ma być wysłany newsletter i zapisuje w bazie danych w tabeli do wysyłki nastepujące informacje: adres e-mail | temat | tresc | flaga=0 3. W cronie mam ustawiony skrypt odpowiedzialny za wysyłkę newslettera, który pobiera z powyższej tabeli maksymalnie 100 wierszy w których flaga jest ustawiona na 0. Sprawdza ilość pobranych rekordów i jeżeli jest zerowa to kończy swoje wykonywanie, jeżeli jest większa niż 0 to wysyła pojedynczo maile pod dany adres przy jednoczesnej zmianie flagi na 1. Skrypt jest wywoływany przez crona raz na 5 minut. Gdy nie ma nic do wysłania nie obciąża on praktycznie w ogóle serwera bo nie pobierze żadnych rekordów i się zakończy. Natomiast gdy pobierze rekordy wysyła maksymalnie 100 maili po czym się kończy. Przy większej liczbie wysyłanych maili można zwiększyć częstotliwość wywoływania skryptu, jednak dla mnie jest ona w zupełności wystarczająca. -------------------- System Sprzedaży Internetowej Syspin: www.syspin.pl
Moja strona: www.tulikowski.com |
|
|
![]()
Post
#24
|
|
![]() Grupa: Zarejestrowani Postów: 76 Pomógł: 7 Dołączył: 30.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
pływająca ramka
![]() ![]() |
|
|
![]()
Post
#25
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Kwestia rozsylania maili rozwiazalem, tak jak to wczesniej przedstawilem. Teraz mam do zgryzienia kolejny orzech. Klient zazyczyl sobie statystyk: 1. ile osob czytalo maila 2. ile kliknelo na link z ich strona 3. ile sie wysubskrybowalo Te pierwsze 3 sa proste do zaimplementowania, ale jak zrobic nastepujace: 4. do ilu mail nie dotarl (zle adresy e-mail) 5. ile wiadomosci zakwalifikowano jako spam Do glowy przyszedl mi tylko pomysl polaczenia sie z SMTP imapem, pobranie naglowkow i ich sprawdzenie. Jakies inne pomysly? Adrian. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:34 |