Tenemos un antiguo servidor SQL 2000 heredado (el último en la granja) - No hemos podido deshacernos de este servidor ya que usa xp_findnextmsg
, xp_readmail
etc. para monitorear un buzón (a través de mapi) e importar todos los correos electrónicos a esa dirección en una base de datos. La base de datos contiene tablas simples que almacenan "de", "a", "sujeto", "cuerpo", "Fecha de envío" & y así sucesivamente.Importar correo electrónico del buzón de AD
Como usted sabe, los procsos anteriores ya no están en uso en SQL 2005 +
Esta tabla se lee de docenas de sistemas internos, por ejemplo, mensajes de correo electrónico a este buzón pueden ser recogidos automáticamente por nuestros sistemas de helpdesk & crear llamadas, etc.
Mi pregunta es esta: ¿cuál es la forma más fácil/moderna de hacer esto en SQL 2008+? ¿Va a ser un caso de escribir un servicio/binario .net que usará smtp o algo así para conectarse a un buzón e insertar los datos en SQL o hay una forma más sencilla de hacerlo? (SSIS/herramientas de terceros/código/proyectos preexistentes?)
Sólo pensé en preguntar antes de comenzar a escribir algo: no tiene sentido reinventar la rueda como estaba.
PD: El buzón en cuestión es un buzón de intercambio 2010.
Editar: Esta funcionalidad se dio a entender que ser re-introducido en 2008 & dbmail: http://connect.microsoft.com/SQLServer/feedback/details/126167/xp-readmail-replacement-for-sql-2005 pero parece que no se materializó!
Editar 2: Acabo de encontrar un ejemplo de código decente aquí que utiliza los nuevos servicios web a cambio 2007+: - (? Alguien ha trabajado con SQL y los servicios web de Exchange) http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/dd2b465b-b1d2-4c0d-82ec-c36c6c482d5d experimentación en curso
Editar 3: ¡listo! Cogí un servicio .net que se encuentra en nuestro servidor de intercambio y supervisa un buzón & empuja cualquier correo nuevo en SQL. En caso de que otros tengan una pregunta similar y necesiten algún código de muestra para empezar, aquí hay un código aproximado (cortado de mi servicio) SQL reemplazado y parametrizado con SQL dinámico básico para facilitar la lectura: (Nota: necesitarás la 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
Me alegro de todo lo que funcionó para usted. Debes mover la edición 3 a una respuesta para que la gente pueda votarla :-) – EBarr