Escribir mensajes de correo electrónico en archivos planos en Outlook con VBA
-
03-07-2019 - |
Pregunta
He escrito una aplicación VBA que abre una carpeta en Outlook y luego la repite en los mensajes. Necesito escribir los cuerpos del mensaje (con algunos ajustes) en un solo archivo plano. Mi código es el siguiente ...
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
La parte en cuestión es " ProcessMailItem " ;. Como no estoy demasiado preocupado por el rendimiento en esta etapa, el muy ineficiente " open, append, close " La metodología de archivo está bien para este ejemplo.
Sé que podría dedicar un tiempo a buscar la respuesta en google pero primero verifiqué aquí y no hubo buenas respuestas para esto. Siendo un fan de Stackoverflow, espero que poner esto aquí ayude a los futuros desarrolladores a buscar respuestas. Gracias por su paciencia.
Solución
Puedes escribir en un archivo sin usar ningún objeto, solo con las herramientas de archivos VBA integradas:
Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1
Otros consejos
Si no le importa volver a abrir el archivo de salida cada vez que agregue un texto, esto debería funcionar.
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
También deberá agregar una referencia a la biblioteca de Microsoft Scripting Runtime. Esto tiene FileSystemObject en él.
También debes cuidar la ventana emergente de seguridad " intentando acceder a las direcciones de correo electrónico " que se trata en Outlook " Protección del modelo de objetos " Problemas de seguridad para los desarrolladores
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