gpt4 book ai didi

sql-server - 从 AD 邮箱导入电子邮件

转载 作者:行者123 更新时间:2023-12-02 11:40:10 25 4
gpt4 key购买 nike

我们有一台旧的 SQL 2000 服务器(服务器场中的最后一台) - 我们无法摆脱该服务器,因为它使用 xp_findnextmsgxp_readmail等来监控邮箱(通过mapi)并将所有发送到该地址的电子邮件导入到数据库中。该数据库包含存储“发件人”、“收件人”、“主题”、“正文”、“发送日期”等的简单表。

如您所知,上述过程在 SQL 2005+ 中不再使用

该表是从数十个内部系统读取的,例如,发送到该邮箱的电子邮件可以由我们的帮助台系统自动获取并创建调用等。

我的问题是:在 SQL 2008+ 中执行此操作最简单/现代的方法是什么?是否会编写一个 .net 二进制文件/服务,使用 smtp 或其他东西连接到邮箱并将数据插入 SQL 中,或者是否有更简单的方法来实现? (SSIS/第 3 方工具/预先存在的代码/项目?)

只是想在开始写东西之前先问一下——没有必要重新发明轮子。

PS:有问题的邮箱是 Exchange 2010 邮箱。

编辑:此功能被暗示将在 2008 年重新引入 & dbmail: http://connect.microsoft.com/SQLServer/feedback/details/126167/xp-readmail-replacement-for-sql-2005但看起来它未能实现!

编辑 2:我刚刚在这里找到了一个不错的代码示例,它利用了 Exchange 2007+ 中的新 Web 服务:http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/dd2b465b-b1d2-4c0d-82ec-c36c6c482d5d - 正在进行实验(有人使用过 SQL 和 Exchange Web 服务吗?)

编辑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("USER@DOMAIN.CO.UK", "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

最佳答案

我首先想到的是 SQL CLR。 MAPI 是 not specifically supported在.net中(至少据我所知),尽管有 work arounds 。幸运的是,host 支持从交换邮箱读取数据。的situations .

顺便说一句,我发现在 .net 中使用电子邮件相对轻松。

关于sql-server - 从 AD 邮箱导入电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9975410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com