Aquí podría ser tu PUBLICIDAD


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

votos
5

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.

Publicado el 30/12/2008 a las 18:35
fuente por usuario Craig
En otros idiomas...        العربية       

3 respuestas

votos
6

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
Respondida el 30/12/2008 a las 09:16
fuente por usuario Jon Fournier


Aquí podría ser tu PUBLICIDAD


votos
4

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.

Respondida el 30/12/2008 a las 07:07
fuente por usuario Eric Ness

votos
1

También hay que tener cuidado de la ventana emergente de seguridad "tratar de acceder a direcciones de correo electrónico", que se tratan en Perspectiva "Object Model Guard" 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

Respondida el 27/10/2011 a las 05:37
fuente por usuario jim