2010-06-28 12 views
7

muszę napisać wniosek o wysłanie newslettera. jaki jest najlepszy sposób na wysłanie newslettera do tysięcy użytkowników? Moje wymogiem jestWyślij biuletyn w asp.net do około 10000 e-maili

  1. Każdy mail to seprately, aby:
  2. Każdy elektronicznej jest wyjątkowy Wyrejestrowanie Link

Czy dobrze jest używać SMTP klasę mail .net? Patrzę na aound może mieć pytania, ale nie mogę zdecydować, które approcah mam iść? Istnieje wiele sugestii

  1. Wielu gwintowane usługa Windows
  2. Korzystanie Mail Server
  3. Dodaj Thread.Sleep (2000) pomiędzy każdym wysłać.

Czy ktoś może sugerować dobry sposób na zmianę tego?

Odpowiedz

8

Nie polecam strony asp.net do wysłania, nawet jeśli uruchomisz ją w osobnym wątku. Wydaje mi się, że ryzykujesz, że serwer wykona recykling twojego procesu w połowie wysyłania, co zepsułoby to. Naprawdę musisz napisać jakąś oddzielną usługę lub aplikację, aby wysłać swoje e-maile.

Najprostszą opcją byłoby po prostu utworzyć szybką i brudną konsolę lub aplikację do tworzenia okien.

Rejestrowanie jest równie ważne, jak w przypadku innych plakatów. Jeśli się nie powiedzie, chcesz wiedzieć dokładnie, co zostało wysłane i gdzie zostało zatrzymane, aby po ponownym uruchomieniu nie wysyłał wszystkich osób, dla których ponownie pracował. Chcesz móc wprowadzić punkt początkowy wysyłania, więc jeśli chcesz uruchomić ponownie na numer e-mail # 5000, możesz.

Klasy w przestrzeni nazw System.Net.Mail będą działały dobrze dla wysyłania poczty.

Jednym z największych problemów będzie znalezienie hosta pocztowego, który umożliwi wysyłanie tak wielu wiadomości e-mail. Większość hostów poczty e-mail ma funkcję dławienia i czasami zmienia się w zależności od warunków serwera, więc jeśli serwer jest intensywnie wykorzystywany, ograniczenia adresu e-mail będą bardziej restrykcyjne, a Ty możesz ustawić tylko 500 wiadomości e-mail na godzinę.

Mamy biuletyn, który wychodzi do około 20000 ludzi jako oddzielne wiadomości e-mail i mieliśmy się bawić z opóźnieniem między maile aż znaleźliśmy taki, który będzie pracować dla naszego gospodarza e-mail. Kończyliśmy między e-mailami o 1,2 s, więc może to być dobry punkt wyjścia.

Myślę, że są gospodarzami email specjalność wysyłek masowych choć więc jeśli masz jeden z tych, to może nie być problemem.

Również, jeśli hostujesz własny adres e-mail, może to nie być problemem. A jeśli hostujesz swoją własną pocztę, będziesz mógł zostawić pocztę w katalogu pobrań i możesz po prostu zrzucić ją tam tak szybko, jak chcesz, i pozwolić usłudze pocztowej odebrać ją we własnym tempie.

EDIT: Oto ustawienia, aby dodać do pliku konfiguracyjnego do ustawiania katalogu pobierającej

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="SpecifiedPickupDirectory" > 
      <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

cześć, dzięki za odpowiedź. Posiadamy własny serwer wymiany. Zastanawiam się, jak mogę upuścić pocztę w katalogu pickup? –

+0

W elemencie mailsettings pliku konfiguracyjnego można zmienić metodę dostarczania. Możesz to również zrobić programowo. http://msdn.microsoft.com/en-us/library/ms164240.aspx –

+0

Dzięki Cris dam to próbować –

1

Napisałem strony, które wysyłają e-maile, ale nie do woluminu, który będzie twój. Niemniej jednak, polecam następujące podstawie kodu I wprowadziły w przeszłości:

  • korzystać z aplikacji internetowej, aby napisać e-maila i wszystko odbiorca odnosi się do tabeli (-ach) bazy danych.

  • Czy proces spoza ASP.NET faktycznie wysyła e-maile. Może to być plik vbs skonfigurowany jako zaplanowane zadanie lub (najlepiej) usługa systemu Windows. Proces zajmie tekst wiadomości e-mail, dołącz link do anulowania subskrypcji, a po wysłaniu pomyślnie oznaczenie rekordu bazy danych jako wysłany. W ten sposób, jeśli wysyłanie nie powiedzie się, może spróbować ponownie później (pętla procesu wysyłania nad wszystkimi rekordami oznaczonymi jako niewysłane).

  • Jeśli potrzebujesz dziennika tego, co zostało wysłane i kiedy, po prostu musisz zachować wysłane rekordy w tabelach bazy danych. W przeciwnym razie po prostu usuń rekordy po ich wysłaniu.

IMHO wysyłanie e-maili w procesie roboczym ASP.NET jest to zły pomysł, bo nie wiem, jak długo to potrwa i czy send nie istnieje niewielka możliwość, aby ponowić próbę przed czasami spośród stron.

2

pewno nie robią tego w ASP.NET. To jeden z największych błędów popełnianych przez nowych programistów.

Musi to być aplikacja lub usługa systemu Windows, która może obsłużyć taką objętość.

1

Tworzenie strony internetowej na „Design” biuletyn. Kiedy trafią Wyślij, kolejka newsletter gdzieś (baza) i użyć innego programu (usługa systemu Windows, etc), aby wysłać list kolejce. Będzie to wiele razy bardziej efektywne i potencjalnie odporne na błędy, jeśli zostanie właściwie zaprojektowane.

1

Pisałem moduł Newsletter (jako część większego systemu) w ASPNET MVC 2, Entity Framework i używając nazw System.Net.Mail. Jest on uruchamiany w widoku i faktycznie działa w kontrolerze za pomocą metody wspierającej wysyłanie. Po wysłaniu każdej wiadomości e-mail śledzę, czy istnieje twardy dysk (wyjątek jest zgłaszany) i aktualizuję ten rekord bazy danych, informując o niepowodzeniu z wyjątkiem, w przeciwnym razie aktualizuję rekord stwierdzający powodzenie. Wykonujemy również personalizację, więc mamy "znaczniki", które zostają zastąpione przez dodatkowe pole w bazie danych (przechowywane jako XML dla elastyczności). Pomaga to w obsłudze funkcji anulowania subskrypcji.

Mój kod jest dość prosta (proszę nie płomienia mnie używając obsługę wyjątków jako logiki biznesowej;) i działa jak czar.

To wszystko odbywa się na VPS w http://maximumasp.com którym odbywa się również 4 miejsca z całkiem przyzwoitym ruchu. Używamy ich serwerów SMTP. Powiadomiliśmy ich, że potrzebujemy tej usługi i nie mieliśmy żadnych problemów w związku.

Mieliśmy 2 GB pamięci RAM na komputerze z systemem Windows 2008 i robiliśmy 6 e-maili/sek. Zderzyliśmy go do 3 GB, ponieważ strony internetowe go potrzebowały, a teraz mailout ma około 20 wiadomości/sek. Nasze wysyłki obejmują od 2000 do 100 000 adresów e-mail.

Krótko mówiąc, do obsługi wysyłania wiadomości e-mail można używać programu ASP.NET, a jeśli doda się trochę logiki do obsługi aktualizacji rekordu, zmartwie się obawa przed utratą połączenia. Tak, istnieją prawdopodobnie lepsze sposoby na to. Zajmujemy się MQMS i wątkami oraz oddzielamy to od usługi Windows, aby uczynić ją bardziej stabilną i skalowalną, gdy umieszczamy więcej klientów i większe listy, ale na razie działa dobrze z rozsądnym raportowaniem i obsługą błędów.

+0

FYI my podwyższył ponownie RAM do 4GB (pokochałbyś środowisk wirtualnych) i teraz są wypompowywanie 35 maile/sek. Okazuje się, że jest to bardzo stabilna konfiguracja. Możesz przeglądać stronę i wracać później, aby wyświetlić raport. Dodaliśmy kilka prostych powiadomień e-mail o tym, kiedy niektóre odsetki wysłania zostały zakończone. Mieliśmy plany dodania bardziej wyrafinowanego kolejkowania, ale obsługa ładowania bez żadnych przeszkód. Nie bój się używać serwera internetowego .NET do zarządzania dużymi wysyłkami! –

Powiązane problemy