Написание сообщений электронной почты для плоских файлов в Outlook с VBA - PullRequest
5 голосов
/ 30 декабря 2008

Я написал приложение 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, я надеюсь, что размещение этого здесь поможет будущим разработчикам в поиске ответов. Спасибо за ваше терпение.

Ответы [ 3 ]

6 голосов
/ 30 декабря 2008

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

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1
4 голосов
/ 30 декабря 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.

1 голос
/ 27 октября 2011

Вам также нужно позаботиться о всплывающем окне безопасности «попытки доступа к адресам электронной почты», которое описано в Проблемы безопасности 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

End Sub

...