Запись сообщений электронной почты в плоские файлы в Outlook с помощью VBA

Я написал приложение VBA, которое открывает папку в Outlook, а затем перебирает сообщения. Мне нужно записать тело сообщения (с некоторыми изменениями) в один плоский файл. Мой код выглядит следующим образом...

Private Sub btnGo_Click()
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.NameSpace
    Dim objInbox As MAPIFolder
    Dim objMail As mailItem
    Dim count As Integer

    Set objNameSpace = objOutlook.GetNamespace("MAPI")
    Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
    count = 0

    For Each objMail In objInbox.Items
       lblStatus.Caption = "Count: " + CStr(count)
       ProcessMailItem (objMail)
       count = count + 1
    Next objMail

  End If
End Sub

Речь идет о «ProcessMailItem». Поскольку на данном этапе меня не слишком заботит производительность, для этого примера подходит очень неэффективная методология «открыть, добавить, закрыть».

Я знаю, что мог бы потратить некоторое время на поиск ответа в Google, но сначала я проверил здесь, и для этого не было хороших ответов. Будучи поклонником Stackoverflow, я надеюсь, что размещение этого здесь поможет будущим разработчикам искать ответы. Спасибо за терпеливость.


person Craig    schedule 30.12.2008    source источник


Ответы (3)


Вы можете обойтись без записи в файл без использования каких-либо объектов, просто используя встроенные файловые инструменты VBA:

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1
person Jon Fournier    schedule 30.12.2008
comment
Я выбрал этот ответ, потому что он очень ориентирован на VBA. Ответ Эрика Несса также действителен!! - person Craig; 31.12.2008

Если вы не возражаете против повторного открытия выходного файла каждый раз, когда вы добавляете текст, это должно сработать.

Private Sub ProcessMailItem(objMail As MailItem)

    Dim fso As New FileSystemObject
    Dim ts As TextStream

    Set ts = fso.OpenTextFile("C:\Outputfile.txt", ForAppending, True)

    ts.Write(objMail.Body)

    ts.Close()
    Set ts = Nothing
    Set fso = Nothing

End Sub

Вам также потребуется добавить ссылку на библиотеку Microsoft Scripting Runtime. В нем есть FileSystemObject.

person Eric Ness    schedule 30.12.2008

Вы также должны позаботиться о всплывающем окне безопасности «попытка доступа к адресам электронной почты», которое описано в . Проблемы безопасности Outlook "Object Model Guard" для разработчиков

Public Sub ProcessMailItem(objMail As MailItem)
Dim FSO As New FileSystemObject
Dim ts As TextStream
Dim loc As String
Dim subject As String
Dim strID As String
' per http://www.outlookcode.com/article.aspx?ID=52
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set oMail = olNS.GetItemFromID(strID)
subject = oMail.subject
Set ts = FSO.OpenTextFile("C:\Documents and Settings\tempuser\My Documents\EMAILS\" + subject, ForAppending, True)
ts.Write (oMail.Body)
ts.Close
Set ts = Nothing
Set FSO = Nothing
Set oMail = Nothing
Set olNS = Nothing

Конец сабвуфера

person jim    schedule 27.10.2011
comment
все еще есть проблема с путем в OpenTextFile. я не получаю последовательных результатов для этого пути по сравнению с более коротким путем без пробелов. - person jim; 03.11.2011