Выводить только текст сообщения в текстовый файл

#vba #outlook

#vba #outlook

Вопрос:

Я работал с этим кодом. Мне нужно взять только тело из нового электронного письма и поместить его в текстовый файл. Я фильтрую по теме и перемещаю ее во вложенную папку. Я не писал большую часть этого кода и пытался лучше понять его.

Я не могу определить, какая часть скрипта управляет этим. Мне не нужна никакая другая часть электронного письма.

      Option Explicit
    Private WithEvents Items As Outlook.Items
    Private Sub Application_Startup()
        Dim olNs As Outlook.NameSpace
        Dim Inbox  As Outlook.MAPIFolder

        Set olNs = Application.GetNamespace("MAPI")
        Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
        Set Items = Inbox.Items
    End Sub

    Private Sub Items_ItemAdd(ByVal Item As Object)
        If TypeOf Item Is Outlook.MailItem Then
            SaveMailAsFile Item ' call sub
        End If
    End Sub
    Public Sub SaveMailAsFile(ByVal Item As Object)
        Dim olNs As Outlook.NameSpace
        Dim Inbox As Outlook.MAPIFolder
        Dim SubFolder As Outlook.MAPIFolder
        Dim Items As Outlook.Items
        Dim ItemSubject As String
        Dim NewName As String
        Dim RevdDate As Date
        Dim Path As String
        Dim Ext As String
        Dim i As Long

        Set olNs = Application.GetNamespace("MAPI")
        Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
        Set Items = Inbox.Items.Restrict("[Subject] = 'Auto~! Keep ad the same'")

        Path = Environ("USERPROFILE") amp; "DesktopTemp"
        ItemSubject = Item.Subject
        RevdDate = Item.ReceivedTime
        Ext = "txt"

        For i = Items.Count To 1 Step -1
            Set Item = Items.Item(i)

            DoEvents

            If Item.Class = olMail Then
                Debug.Print Item.Subject ' Immediate Window
                Set SubFolder = Inbox.Folders("SSX") ' <--- Update Fldr Name

                ItemSubject = Format(RevdDate, "YYYYMMDD-HHNNSS") _
                                                        amp; " - " amp; _
                                                Item.Subject amp; Ext

                ItemSubject = FileNameUnique(Path, ItemSubject, Ext)

                Item.SaveAs Path amp; ItemSubject, olTXT
                Item.Move SubFolder
            End If
        Next

        Set olNs = Nothing
        Set Inbox = Nothing
        Set SubFolder = Nothing
        Set Items = Nothing

    End Sub


    '// Check if the file exists
    Private Function FileExists(FullName As String) As Boolean
    Dim fso As Object
        Set fso = CreateObject("Scripting.FileSystemObject")

        If fso.FileExists(FullName) Then
            FileExists = True
        Else
            FileExists = False
        End If

        Exit Function
    End Function

    '// If the same file name exist then add (1)
    Private Function FileNameUnique(Path As String, _
                                   FileName As String, _
                                   Ext As String) As String
    Dim lngF As Long
    Dim lngName As Long
        lngF = 1
        lngName = Len(FileName) - (Len(Ext)   1)
        FileName = Left(FileName, lngName)

        Do While FileExists(Path amp; FileName amp; Chr(46) amp; Ext) = True
            FileName = Left(FileName, lngName) amp; " (" amp; lngF amp; ")"
            lngF = lngF   1
        Loop

        FileNameUnique = FileName amp; Chr(46) amp; Ext

        Exit Function
    End Function
  

Ответ №1:

Краткий пример здесь

 Option Explicit
Private Sub Example()
    Dim FSO As New FileSystemObject
    Dim TS As TextStream
    Dim olMsg As Outlook.MailItem

    Set olMsg = ActiveExplorer.selection.Item(1)
    Set TS = FSO.OpenTextFile("C:TempEmail.txt", ForAppending, True)
        TS.Write (olMsg.Body)
        TS.Close

End Sub
  

Комментарии:

1. TS.Write (olMsg.Body) в этой части содержится ссылка только на текст сообщения?

2. @JonathanSavas. ДА. В вашем исходном сообщении вы используете SaveAs который сохраняет все сообщение в текстовом формате. .Body является текстовым телом почтового элемента. 0m3r показал вам, как записать текстовое тело выбранного в данный момент электронного письма в файл. Достаточно ли этого для изменения вашего макроса?