Запись сообщений электронной почты в плоские файлы в Outlook с помощью VBA
-
03-07-2019 - |
Вопрос
Я написал приложение 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
Конечная подстанция