5

私のマーケティング部門は、人々がウェブページから参加する懸賞を行うことに決めました。それは素晴らしいことですが、情報はいかなる種類の DB にも保存されず、電子メールとして交換メール ボックスに送信されます。偉大な。

私の課題は、これらのメールからエントリ (およびマーケティング情報) を抽出し、フラット ファイルや CSV などのより便利な場所に保存することです。唯一の救いは、電子メールの形式が非常に一貫していることです。

すべての電子メールをファイルに保存し、アプリを作成してそれらすべてを処理することに時間を費やすことができると確信していますが、はるかに洗練されたソリューションを望んでいました. Exchange メールボックスにプログラムでアクセスし、すべての電子メールを読み、そのデータを保存できますか?

4

2 に答える 2

7

これが私が使用したコードです...

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
于 2008-12-31T20:37:16.523 に答える
2

交換用メールボックスのメッセージを取得するにはさまざまな方法がありますが、これはデータを抽出するために 1 回だけ実行する必要があるように思われるため、Outlook 自体の内部で実行する VBA マクロを作成することをお勧めします (問題の Exchange メールボックスを Outlook 内で開いた)。特定のメールボックス内のメール アイテムを繰り返し処理し、そこから本文を読み取るのは非常に簡単です。その後、必要なものだけを含むテキスト ファイルを作成できます。

于 2008-12-30T00:17:19.360 に答える