por para masivo macro exportar enviar ejemplos desde datos correos correo archivo application alerta vba email outlook outlook-vba flat-file

para - Escribir mensajes de correo electrónico a archivos planos en Outlook con VBA



outlook vba ejemplos (3)

Puedes salirte con la tarea de escribir en un archivo sin usar ningún objeto, simplemente usando las herramientas de archivo VBA integradas:

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

Escribí una aplicación de VBA que abre una carpeta en Outlook y luego repite 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, la muy ineficaz metodología de archivo "abrir, adjuntar, cerrar" está bien para este ejemplo.

Sé que podría pasar algún tiempo buscando la respuesta con google, pero primero lo verifiqué y no hubo buenas respuestas para esto. Como soy fanático de Stackoverflow, espero que poner esto aquí ayude a los futuros desarrolladores a buscar respuestas. Gracias por su paciencia.


Si no te importa volver a abrir el archivo de salida cada vez que agregas algo de texto, entonces 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 Microsoft Scripting Runtime. Esto tiene FileSystemObject en él.


También tiene que ocuparse de la ventana emergente de seguridad "tratando de acceder a las direcciones de correo electrónico", que se cubre en Outlook "Guardia del modelo de objetos" Problemas de seguridad para 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