2012-04-02 23 views
9

Chúng tôi có một máy chủ SQL 2000 cũ (lần cuối cùng trong trang trại) - Chúng tôi không thể loại bỏ máy chủ này vì nó sử dụng xp_findnextmsg, xp_readmail vv để theo dõi hộp thư (qua mapi) và nhập tất cả email đến địa chỉ đó vào cơ sở dữ liệu. Cơ sở dữ liệu chứa các bảng đơn giản lưu trữ "từ", "tới", "chủ đề", "nội dung", "Ngày gửi" &, v.v.Email nhập từ AD Mailbox

Như bạn đã biết, procs trên không còn được sử dụng trong SQL 2005 +

Bảng này được đọc từ hàng chục hệ thống nội bộ, cho email dụ đến hộp thư này có thể tự động chọn của hệ thống trợ giúp của chúng tôi & tạo các cuộc gọi, v.v.

Câu hỏi của tôi là: cách dễ nhất/hiện đại nhất trong SQL 2008+ là gì? Nó sẽ là một trường hợp viết một .net nhị phân/dịch vụ sẽ sử dụng smtp hoặc một cái gì đó để kết nối với một hộp thư và chèn dữ liệu vào SQL hoặc là có một cách đơn giản để làm điều đó? (SSIS/công cụ của bên thứ ba/mã/dự án có sẵn từ trước?)

Chỉ cần nghĩ rằng tôi sẽ hỏi trước khi tôi bắt đầu viết điều gì đó - không có điểm nào phát minh ra bánh xe như trước đây.

PS: Hộp thư được đề cập là hộp thư trao đổi năm 2010.

Chỉnh sửa: Chức năng này được gợi ý được giới thiệu lại vào năm 2008 & dbmail: http://connect.microsoft.com/SQLServer/feedback/details/126167/xp-readmail-replacement-for-sql-2005 nhưng có vẻ như nó không thành công!

Chỉnh sửa 2: Tôi vừa tìm thấy một mẫu mã phong nha ở đây là sử dụng các dịch vụ web mới để đổi lấy 2007+: - (? Có ai từng làm việc với SQL và các dịch vụ web của Exchange) http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/dd2b465b-b1d2-4c0d-82ec-c36c6c482d5d thử nghiệm cơ bản dở dang

Chỉnh sửa 3: Đã xong! Tôi đã loại bỏ một dịch vụ .net nằm trên máy chủ trao đổi của chúng tôi và giám sát một hộp thư & đẩy bất kỳ thư mới nào vào SQL. Trong trường hợp người khác có câu hỏi tương tự và cần một số mã mẫu để bắt đầu - đây là một số mã thô (được cắt nhỏ trong dịch vụ của tôi - thay thế SQL được tham số hóa bằng SQL động cơ bản để dễ đọc): (Lưu ý: bạn cần có API EWS 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

Rất vui khi mọi thứ hoạt động cho bạn. Bạn nên di chuyển chỉnh sửa 3 đến một câu trả lời để mọi người có thể bỏ phiếu cho nó :-) – EBarr

Trả lời

3

Điều đầu tiên mà tôi nghĩ là SQL CLR. MAPI là not specifically supported trong .net (ít nhất là theo kiến ​​thức của tôi), mặc dù có work arounds. Đọc từ hộp thư trao đổi, thật may mắn, được hỗ trợ trong host trong số situations.

BTW, tôi đã tìm thấy đang làm việc với email trong .net tương đối không đau.

+0

EWS chắc chắn dường như là cách để đi - đặt câu trả lời của bạn làm câu trả lời. – HeavenCore

Các vấn đề liên quan