exchange-server - 从电子邮件(或数千封电子邮件)中提取数据 [基于交换]

标签 exchange-server text-extraction

祝福他们,我的营销部门决定进行抽奖事件,让人们通过网页进入。这很好,但信息不会存储到任何类型的数据库中,而是作为电子邮件发送到交换邮箱。伟大的。

我的挑战是从这些电子邮件中提取条目(和营销信息)并将它们存储在更有用的地方,比如平面文件或 CSV。唯一的优点是电子邮件具有高度一致的格式。

我确信我可以花时间将所有电子邮件保存到文件中,然后编写一个应用程序来处理所有邮件,但希望有一个更优雅的解决方案。我可以以编程方式访问 Exchange 邮箱,阅读所有电子邮件,然后保存该数据吗?

最佳答案

这是我使用的代码......

Private Sub btnGo_Click()
  If ComboBox1.SelText <> "" Then
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.NameSpace
    Dim objInbox As MAPIFolder
    Dim objMail As mailItem

    //Get the MAPI reference
    Set objNameSpace = objOutlook.GetNamespace("MAPI")

    //Pick up the Inbox
    Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
    For Each objFolder In objInbox.Folders
       If (objFolder.Name = ComboBox1.SelText) Then
          Set objInbox = objFolder
       End If
    Next objFolder

    //Loop through the items in the Inbox
    Dim count As Integer
    count = 1

    For Each objMail In objInbox.Items
       lblStatus.Caption = "Count: " + CStr(count)
       If (CheckBox1.Value = False Or objMail.UnRead = True) Then
          ProcessMailItem (objMail.Body)
          count = count + 1
          objMail.UnRead = False
       End If
    Next objMail
  End If
End Sub

Private Sub ProcessMailItem(strBody As String)
   Open "C:\file.txt" For Append As 1

   Dim strTmp As String
   strTmp = Replace(strBody, vbNewLine, " ")
   strTmp = Replace(strTmp, vbCrLf, " ")
   strTmp = Replace(strTmp, Chr(13) & Chr(10), " ")
   strTmp = Replace(strTmp, ",", "_")

   //Extra Processing went here (Deleted for brevity)
   Print #1, strTmp
   Close #1

End Sub

Private Function Strip(strStart As String, strEnd As String, strBody As String) As String
   Dim iStart As Integer
   Dim iEnd As Integer

   iStart = InStr(strBody, strStart) + Len(strStart)
   If (strEnd = "xxx") Then
      iEnd = Len(strBody)
   Else
      iEnd = InStr(strBody, strEnd) - 1
   End If

   Strip = LTrim(RTrim(Mid(strBody, iStart, iEnd - iStart)))
End Function


Private Sub UserForm_Initialize()
  Dim objOutlook As New Outlook.Application
  Dim objNameSpace As Outlook.NameSpace
  Dim objInbox As MAPIFolder
  Dim objFolder As MAPIFolder

  //Get the MAPI reference
  Set objNameSpace = objOutlook.GetNamespace("MAPI")

  //Pick up the Inbox
  Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)

  //Loop through the folders under the Inbox
  For Each objFolder In objInbox.Folders
    ComboBox1.AddItem objFolder.Name
  Next objFolder
End Sub

关于exchange-server - 从电子邮件(或数千封电子邮件)中提取数据 [基于交换],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399165/

相关文章:

c++ - 如何在C++中提取符号前的数字

python - 从 Python 中的 PDF 中提取带有字体详细信息(样式、大小、颜色、斜体等)的文本

java - Tika 在检测到 mime-type 后无法解析

soap - 在一次 'syncFolderItems' 操作中监控多个文件夹?

c# - 从代码发送电子邮件时出现“5.7.1 Client does not have permission”错误

asp.net - 无法加载文件或程序集 'Microsoft.Exchange.WebServices, Version=14.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

web-services - 如何从 Exchange 收件箱返回用户的未读邮件计数?

php - 是否可以为非您拥有的站点/服务器设置 cookie?

iOS googlemobilevision 文本识别库快速集成

php - 我可以从 mysql 表中提取 html 而不是纯文本吗?