2012-04-02 15 views
9

Mamy starą starszą wersję serwera SQL 2000 (ostatnia w farmie) - Nie mogliśmy pozbyć się tego serwera, ponieważ używa on xp_findnextmsg, xp_readmail itd. Do monitorowania skrzynki pocztowej (poprzez mapi) i zaimportuj wszystkie wiadomości e-mail z tego adresu do bazy danych. Baza danych zawiera proste tabele, które przechowują "od", "do", "tematu", "treści", "daty wysłania" & dalej.Importuj wiadomość e-mail z AD Mailbox

Jak wiadomo, powyższe procuje nie są już w użyciu w SQL 2005+

Tabela ta jest odczytywana z kilkudziesięciu systemów wewnętrznych, na przykład wiadomości e-mail do tej skrzynki mogą być automatycznie zbierane przez nasze systemy helpdesku & tworzenie połączeń itp.

Moje pytanie brzmi: jaki jest najłatwiejszy/nowoczesny sposób robienia tego w SQL 2008+? Czy będzie to przypadek pisania binarnego/usługi .net, który użyje smtp lub czegoś, aby połączyć się ze skrzynką pocztową i wstawić dane do SQL lub czy jest prostszy sposób to zrobić? (SSIS/narzędzia firm trzecich/istniejący kod/projekty?)

Pomyślałem, że zapytam, zanim zacznę coś pisać - nie ma sensu wymyślać koła.

PS: Skrzynka pocztowa, o której mowa, jest skrzynką pocztową Exchange 2010.

Edit: Funkcjonalność ta została zasugerował, aby zostać ponownie wprowadzony w 2008 & dbmail: http://connect.microsoft.com/SQLServer/feedback/details/126167/xp-readmail-replacement-for-sql-2005 ale wygląda na to, że nie udało się zmaterializować!

Edycja 2: Właśnie znalazłem godnej przykładowy kod tutaj, że korzysta z nowych usług internetowych w zamian 2007+: - (? Czy ktoś kiedykolwiek pracował z SQL i usług internetowych Exchange) http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/dd2b465b-b1d2-4c0d-82ec-c36c6c482d5d eksperymentowanie w toku

Edytuj 3: Wszystko gotowe! Zapukałem usługę .net, która znajduje się na naszym serwerze wymiany i monitoruje skrzynkę pocztową & przesyła każdą nową pocztę do SQL. Inni mają podobne pytanie i potrzebują kilku przykładowego kodu, aby zacząć - oto trochę szorstkiego kodu (usunięty z mojej usługi - zastąpiony sparametryzowany SQL z podstawowym dynamicznym SQL dla łatwego czytania): (Uwaga: będziesz potrzebował EWS API 1.1 dll)

Imports Microsoft.Exchange.WebServices.Data 

Dim ExchangeUrl As String = "https://DOMAIN.co.uk/ews/exchange.asmx" 
Dim service As New ExchangeService(ExchangeVersion.Exchange2010_SP1) 
service.Url = New Uri(ExchangeUrl) 
service.Credentials = New WebCredentials("[email protected]", "PASSWORD") 
Dim findResults As FindItemsResults(Of Item) = service.FindItems(WellKnownFolderName.Inbox, New ItemView(1000)) 
If findResults.Count > 0 Then 
    service.LoadPropertiesForItems(findResults.Items, New PropertySet(BasePropertySet.FirstClassProperties)) 
End If 

For Each item As Item In findResults.Items 
    Dim CurrentEmail As EmailMessage = item 

    '#### Grab Email Information 
    E_ID = CurrentEmail.InternetMessageId.ToString() 
    If CurrentEmail.Sender.Address.ToString() <> "" Then 
     E_From = Replace(CurrentEmail.Sender.Address, "'", "''") 
    Else 
     E_From = Replace(CurrentEmail.Sender.Name, "'", "''") 
    End If 
    E_From = Replace(CurrentEmail.Sender.Address, "'", "''") 
    E_To = Replace(CurrentEmail.DisplayTo, "'", "''") 
    E_CC = Replace(CurrentEmail.DisplayCc, "'", "''") 
    E_Subject = Replace(CurrentEmail.Subject, "'", "''") 
    E_Body = Replace(CurrentEmail.Body.Text, "'", "''") 
    E_Received = CurrentEmail.DateTimeReceived.ToString("dd/MM/yyyy HH:mm:ss") 
    E_Sent = CurrentEmail.DateTimeSent.ToString("dd/MM/yyyy HH:mm:ss") 

    '#### Save the email into SQL 
    If SqlQuery("INSERT INTO tbl_Emails ([MessageID], [From], [To], [CC], [Subject], [Body], [Received], [Sent]) VALUES ('" & E_ID & "', '" & E_From & "', '" & E_To & "', '" & E_CC & "', '" & E_Subject & "', '" & E_Body & "', CONVERT(DATETIME, '" & E_Received & "', 103), CONVERT(DATETIME, '" & E_Sent & "', 103))") = True Then 
     item.Delete(DeleteMode.HardDelete) 
    End If 
Next 
+2

Cieszę się, że wszystko udało się dla Ciebie. Powinieneś przenieść edycję 3 do odpowiedzi, aby inni mogli ją zagłosować :-) – EBarr

Odpowiedz

3

Pierwszą rzeczą, która przychodzi mi na myśl, jest SQL CLR. MAPI to not specifically supported w .net (przynajmniej według mojej wiedzy), chociaż istnieją work arounds. Czytanie ze skrzynki pocztowej, na szczęście, jest obsługiwane w host z situations.

Przy okazji stwierdziłem, że praca z pocztą e-mail w .net jest relatywnie bezbolesna.

+0

EWS zdecydowanie wydaje się być drogą do zrobienia - ustawiając twoją odpowiedź jako odpowiedź. – HeavenCore