Wysyłanie dużych ilości wiadomości e-mail + testowanie

0

Witam,
Chciałbym napisać narzędzie pozwalające wysyłać wiadomości email. Tzn - ktoś ma już napisany jakiś system dla firmy (np przychodnia, biblioteka czy nawet bank) - ale chce dołączyć do niego funkcjonalność wysyłania różnych wiadomości. To tak tytułem wstępu.

Zwykła lokalna biblioteka będzie wysyłać jakieś maile informacyjnie - dość sporadycznie. Np. będzie kończyła się komuś ważność karty - wyśle jeden email do tego członka. Ale w przypadku gdy była awaria i musi dać znać swoim członkom, że przez najbliższy tydzień nie będzie działać - wyśle x maili (gdzie x - to liczba członków) - i tutaj zaczyna się mój problem. Jestem programistą i muszę założyć że będzie to maksymalnie dużo ludzi.

Moje pytanie jest dość złożone dlatego podzieliłem je:

  1. Bardzo ciekawi mnie, jakie rozwiązania stosuje się teraz - przy tak dużych projektach? Np. w systemie bankowym. Jak tam wysyłane są czasem miliony wiadomości e-mail jednocześnie?

  2. Chciałbym napisać narzędzie elastyczne (tzn. klient sam sobie będzie wprowadzał serwer email z jakiego korzysta) - biblioteka może korzystać z darmowego konta na gMail.com, ale bank już raczej nie.
    Ile jednocześnie jestem wysłać w stanie maili z jednego darmowego konta?

  3. Czy żeby wysyłać tak duże ilości maili muszę założyć swój własny serwer? Ewentualnie kupić jakiś płatny?

i chyba ostatnie pytanie:
4. Testowanie - nie chce nikogo spamować - ale takie aplikacje też trzeba testować. Jak mogę przetestować sytuację: Wysłać z jednego adresu, powiedzmy milion maili na milion różnych adresów. Chodzi o to aby realnie odzwierciedlić taką sytuację bez spamowania.

Z góry dzięki, za każdą pomoc.

0

No to chyba przydałby Ci się własny serwer. Chociażby do testowania, bo skąd indziej wziąć milion różnych adresów mailowych.

0

add 1
Miliony to raczej w systemach newsletter, banki nie wysyłają raczej emaili do klientów, jeśli już to też z ofertą reklamową.
Aby zwiększyć wydajność twoja aplikacja powinna mieć dobre (szybkie) połączenie z serwerem smtp, z którego będziesz wysyłał emaile. Treści wiadomości powinny być już uprzednio wygenerowane (o ile to możliwe), aby nie tracić mocy obliczeniowej i czasu na ich generowanie.

add 2
Zależy od konta. Raczej występują ograniczenia na liczbę emaili w jednostce czasu (np. 10/min.). Musisz sobie poczytać jakieś regulaminy lub przetestować.

add 3
Nie nie musisz. Jeśli będziesz miał słabe połączenie z serwerem smtp to cały proces wysyłki potrwa dłużej i tyle.

add 4
Aby przetestować czy samo rozwiązanie działa poprawnie nie musisz wysyłać maili na miliony adresów, jak wyślesz na 3 wyjdzie na to samo. W kontekście testowania wydajności można rozważyć wysyłkę na dużą liczbę adresów. Ale znowu wąskie gardła to raczej połączenia sieciowe do serwera smtp oraz sama sprawność serwera smtp.

0

dzięki za odpowiedź,

No właśnie mi chodzi o to - że nie wiem, czy ktoś będzie miał swój własny server czy nie.
Chodzi mi o zrobienie czegoś elastycznego dla firm, które wysyłają 10 maili w ciągu miesiąca do swoich klientów po firmy, które wysyłają ich (nie wiem ile - chciałbym aby było to możliwie najwięcej).

@massther
Wspomniałeś o systemach newsletterowych - chciałbym właśnie coś takiego zastąpić. Aby firma nie musiała korzystać z ich usług. Np. jeżeli firma posiada bardzo szybki serwer, ma bardzo szybki dostęp do internetu - ma swoja własną domenę i adres email - to co stoi na przeszkodzie, żeby sama wysyłała informacje klientom?

0

Nic. Tylko ty chcesz stworzyć co dokładnie? bibliotekę, która pozwoli np. w jakiś sposób załadować dane do wysłki z pliku txt, xml, xls, z bazy danych etc.?
Systemy newsletterowe, od strony deweloperskiej, to właśnie biblioteki/aplikacje, które umożliwiają łatwe zdefiniowanie wysyłki masowej, zazwyczaj tego samego kontentu to wielu odbiorców, ewentualnie z opcją personalizacji, czyli wstawienia np. "Szanowny Janie Kowalski".
Nie ma tu wielkiej magi.
Jeśli chcesz ewentualnie znacząco przyspieszyć wysyłkę, możesz spróbować do jakiegoś konkretnego smtp dopisać jakieś mechanizmy (plug in), które gdzieś załadują gotowe maile do wysyłki. Czy będzie to szybsze, może, ciężko orzec bez testów i analizy konkretnego przypadku.

Ja widziałbym to tak:
Część kliencka aplikacji do definiowania wysyłki masowej oraz cześć serwerowa realizująca tą wysyłkę.
W kliencie definiujesz treść maila, załączniki etc. Następnie źródło odbiorców, najlepiej żeby tu była duża elastyczność, różne formaty plików, bazy danych etc. Następnie jakiś harmonogram wysyłki, jednorazowo, cyklicznie etc.
Część serwerowa będzie miała za zadanie realizować harmonogram przez zdefiniowany serwer smtp.
Jeśli stworzysz mechanizmy dużej kastomizacji treści maila w oparciu o jakieś parametry, to pomysłem na przyspieszenie może być najpierw wygenerowanie treści maili dla wszystkich odbiorców w wielu wątkach, a następnie wysłanie już gotowych przez smtp. Wysyłanie przez wiele wątków też jest do rozważenia.

0

Dzięki wielkie,

No w sumie, można powiedzieć, że bibliotekę.
U mnie, na dzień dzisiejszy wygląda to tak:

Cześć serwerowa (w dużym skrócie):
Baza danych z różnymi wiadomościami (w tym e-mail).
Windows service, czyli usługa przeglądająca bazę w poszukiwaniu wiadomości do wysłania (po dacie wykonania) i ewentualnie wysyłania tych wiadomości.
W tym temacie pytam tylko o przypadek wiadomości e-mail.

Część kliencka - tworzy wiadomość (może być z parametrami, może być z jakiegoś wzoru), harmonogram, załączniki, tworzy listę odbiorców (jest do dość rozbudowane i elastyczne) - i następnie wysyła takie "zadanie". Zadanie to zostaje zapisane do bazy z odpowiednimi datami wykonania. I tyle jeżeli chodzi o klienta.

Wracając do serwera: To mam już zaimplementowane pobieranie list maili do wysłania, zważając na różne parametry. Oczywiście każdy najmniejszy krok będzie logowany na serwerze (to jeszcze jest do zrobienia). Taka lista przekazywana jest do "silnika" mojej usługi - czyli w miejsce gdzie wszystkie wiadomości zostaną wysłane - i tutaj w zasadzie zaczyna się temat:

Na chwilę obecną mam tutaj zwykłe użycie biblioteki System.Net.Mail - wysyłając maila do każdej osoby osobno. Widomość jest utworzona wcześniej - zmieniam tylko adresata i wysyłam w pętli.

Jednak, wydaje mi się to względnie proste rozwiązanie - nie testowałem go przy większych ilościach bo jeszcze nie wiem jak - nie chce trafić na czarne listy za spamowanie, a jednocześnie chciałbym aby testy były wiarygodne. Ale to jest druga część mojego pytanie - nie teraz.

Dlatego, ciekawi mnie - w czym lepsze są systemy newsletterowe (te z górnej półki i z dolnej półki), od takiego rozwiązania?

  • Czy jest to prędkość tworzenia wielu wiadomości (tj wielowątkowość, super-serwery) ?
  • Czy jest to prędkość połączenia z internetem?
    To na pewno tak, ale czy jeszcze coś?
    Czy muszę spełnić jakieś prawa antyspamowe w takiej aplikacji (jako deweloper, nie będę tego sam używał) ?

Może tak: Czy przy super-szybkim serwerze i bardzo dobrym połączeniu z internetem oraz taką aplikacją jaką zaproponowałem wyżej - płacenie systemom newsletterowym ma jeszcze sens?

1 użytkowników online, w tym zalogowanych: 0, gości: 1