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

StackOverflow https://stackoverflow.com/questions/400941

Вопрос

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

Это было полезно?

Решение

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

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1

Другие советы

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

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 library.В нем есть FileSystemObject.

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

Конечная подстанция

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top