2012-04-02 7 views
9

旧式のSQL 2000サーバー(ファーム内の最後のサーバー) - xp_findnextmsgxp_readmailなどを使用してこのサーバーを削除できませんでした(MAPI経由)そのアドレスにあるすべての電子メールをデータベースにインポートします。データベースには、 "from"、 "to"、 "subject"、 "body"、 "Sent Date" &などが格納された単純なテーブルが含まれています。ADメールボックスからのメールのインポート

あなたが知っているかもしれませんが、上記のprocsのは、SQL 2005+で使用されなくなった

このメールボックスへのインスタンスのメールが自動的に私たちのヘルプデスク・システムによってピックアップすることができますのためにこのテーブルは、内部システムの数十から読み込まれます&コールの作成など

私の質問はこれです:これはSQL 2008+でこれを行う最も簡単な方法ですか? smtpや何かを使ってメールボックスに接続し、データをSQLに挿入する、あるいはそれを行う簡単な方法があるでしょうか.netバイナリ/サービスを書く場合でしょうか? (SSIS /サードパーティのツール/既存のコード/プロジェクト?)

私は何かを書く前に尋ねると思っていました。

PS:問題のメールボックスはExchange 2010メールボックスです。

編集:この機能は、2008 & dbmailに再導入することが示唆されたhttp://connect.microsoft.com/SQLServer/feedback/details/126167/xp-readmail-replacement-for-sql-2005が、それはそれは実体化に失敗したように見えます!

編集2:私はちょうど2007+交換で新しいWebサービスを利用し、ここでまともなコードサンプル見つけた: - (?誰もがこれまでSQLおよびExchange Webサービスで働いている)http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/dd2b465b-b1d2-4c0d-82ec-c36c6c482d5d進行中の実験を

編集3:すべて完了!私は交換サーバーに座ってメールボックスを監視する.netサービスをノックした。&は新しいメールをSQLにプッシュする。他の人も同じような質問があり、始めにいくつかのサンプルコードが必要です - ここでは、私のサービスから抜粋した簡単なコードがあります。簡単な読み込みのためにパラメータ化されたSQLを基本的な動的SQLに置き換えました:(注: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

すべてがうまくいってくれました。あなたは人々がそれを投票することができるように編集3を答えに移すべきです:-) – EBarr

答えて

3

私にとって心に浮かぶのは、SQL CLRです。 MAPIはwork aroundsですが、not specifically supportedが.net(少なくとも私の知る限り)です。 hostの交換メールボックスからの読書は、situationsでサポートされています。

私は比較的簡単に痛みを感じることはありません。

+0

EWSは間違いなくあなたの答えを答えとして設定する方法です。 – HeavenCore

関連する問題