2009-02-17 12 views
9

Piszemy funkcję wysyłania wiadomości e-mail z przypomnieniem do klientów w ciągu x dni i zastanawialiśmy się, czy możliwe było opóźnienie wysyłania wiadomości e-mail w sposób podobny do tego, jaki można w programie Outlook (nowe Poczta> Przycisk Opcje> Nie dostarczaj wcześniej) w języku C#.Opóźnianie wysyłania wiadomości e-mail w języku C#

Czy ktoś wie, jak to zrobić?

Odpowiedz

3

Jedną z możliwości jest utworzenie usługi uruchamianej na zaplanowanym przetwarzaniu oczekującej poczty. Możesz przechowywać oczekującą pocztę w bazie danych SQL. (Dave szczegóły tego)

Ten artykuł wygląda obiecująca, jeśli chcesz uniknąć „prawdziwy” usługa

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

+0

Postanowiłem przejść z metodą opisaną w powyższym linku i wygląda na to, że działa dobrze. Dzięki –

+0

Nie ma za co Chris – ccook

1

SmtpClient jest całkiem niezłym klientem i nie obsługuje tego - wysyłane są natychmiast, niezależnie od tego, czy są synchroniczne czy asynchroniczne. Możesz to zrobić za pomocą integracji Exchange. Nie jestem jednak pewien, jakie interfejsy API są dostępne dla Exchange. Najprostszym sposobem byłoby pozostawienie wiadomości w tabeli bazy danych wraz z czasem do wysłania i mieć proces off-line, który regularnie skanuje tę tabelę i szuka wiadomości, których wartość czasu do wysłania minęła i nie są oznaczone jako wysłany.

+0

Hehehe wielkie umysły myślą podobnie :) –

+0

Możesz w EWS 2.0, który sprawia, że ​​zastanawiam się, czy istnieje specjalny nagłówek, który możesz ustawić tak samo poprzez SMTP na serwerze Exchange: http://msdn.microsoft.com/pl -us/library/office/jj220496 (v = exchg.80) .aspx – kamranicus

9

Jeśli chcesz wysłać wiadomość e-mail na serwer SMTP w celu przechowywania przez kilka dni, serwer będzie musiał obsługiwać tę funkcję. Odradzam jednak robienie tego w ten sposób. Jeśli masz problem z brakującymi wiadomościami e-mail, może być trudno wyśledzić.

Oto co zrobię:

  1. Harmonogram maile w systemie dokonując wpisu w tabeli.
  2. zawierać „SendDate” kolumny w tabeli, w którym można ustawić datę w przyszłości
  3. Napisz usługę Windows, który budzi się raz na 15 minut (na przykład) i wysyła e-maile w tej tabeli, gdzie SendDate < CurrentDate
+0

Dokładnie to robimy dla naszej witryny pomocy technicznej, aby powiadomić klientów, gdy zgłaszany incydent zostanie zmodyfikowany. Jedyna różnica polega na tym, że używamy zadania SQL Server do wysyłania poczty zamiast usługi. – Carl

+0

Ja też to robię. O wiele szybciej jest wstawić wiadomość e-mail do tabeli bazy danych, a także można przechowywać rekord wiadomości e-mail wysłanych. – GateKiller

3

nr

Drogą do osiągnięcia tego celu byłoby dla aplikacji do napisz wiadomość e-mail do kolejki (może to być baza danych, plik, MSMQ itp.), a następnie napisz osobny proces, który w późniejszym terminie odczytuje pocztę z tej kolejki i wyśle ​​ją.

O ile mi wiadomo, protokół SMTP nie ma żadnej funkcji "opóźnionego wysłania". Ponadto funkcja, do której odwołuje się program Outlook, po prostu przechowuje ją w skrzynce nadawczej klienta do określonej daty, więc jest to funkcja po stronie klienta, a nie funkcja po stronie serwera.

Powiązane problemy