Outlook VBA - 약속에서 이메일 첨부 파일을 열고 보낸 사람의 이메일 주소를 추출합니다.

Outlook VBA - 약속에서 이메일 첨부 파일을 열고 보낸 사람의 이메일 주소를 추출합니다.

200개 이상의 일정(약속) 항목이 있고 모든 항목에는 원본 이메일 메시지가 첨부 파일로 포함되어 있습니다. 약속의 이메일 첨부 파일에서 보낸 사람의 이메일 주소를 추출해야 합니다.

MailItem 개체( MailItem.SenderEmailAddress)에서 보낸 사람의 이메일 주소를 추출하는 방법을 알고 있지만 이메일 메시지가 이제 약속의 첨부 파일인 경우 이러한 속성에 액세스하는 방법을 모르겠습니다. 개체 AppointmentItem에 첨부 파일 속성이 있지만 첨부 파일 개체의 속성에 액세스하는 방법에 대한 다른 정보는 어디에도 없습니다. AppointmentItem.Attachments.item(1).SenderEmailAddress를 시도했지만 '객체가 지원되지 않습니다...'라는 메시지가 표시되었습니다.

답변1

.msg 첨부 파일을 저장하고 메일 항목으로 연 다음 메일 항목 속성을 읽을 수 있습니다.

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration
' If desperate declare as Variant


Private Sub saveAndRetrievePropertyOfAttachedMail()

    Dim sPath As String
    
    ' the selected item may not be an AppointmentItem
    Dim oItem As Object
    
    sPath = ""
    
    Set oItem = ActiveExplorer.Selection.Item(1)
    
    If TypeName(oItem) = "AppointmentItem" Then
        Debug.Print oItem.subject
        
        ' sPath is initially blank
        ' There are risks with public variables.
        ' This is a slightly awkward way to avoid declaring sPath as a public variable
        saveAttachmentsToDriveFolder oItem, sPath
        
        returnPropertiesOfAttachmentInDriveFolder sPath
        
    End If
    
End Sub


Sub saveAttachmentsToDriveFolder(objItem, strPath)

    Dim fso As Object
    Dim fldTemp As Object
    
    Dim objAtt As Object
    Dim strFile As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' This is a default folder everyone should have.
    ' You may use another folder.
    ' Kill the files when you are done or delete manually
    Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
    Debug.Print fldTemp
    
    strPath = fldTemp.Path & "\"
    Debug.Print strPath
    
    For Each objAtt In objItem.Attachments
        strFile = strPath & objAtt.FileName
        Debug.Print strFile
        objAtt.SaveAsFile strFile
    Next
    
End Sub


Sub returnPropertiesOfAttachmentInDriveFolder(strAttachmentFolder)

Dim objFileSystem As Object
Dim objFolder As Object
Dim objFiles As Object
Dim objFile As Object
Dim objItem As Object

Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSystem.GetFolder(strAttachmentFolder)
Set objFiles = objFolder.Files

For Each objFile In objFiles

    If objFileSystem.GetExtensionName(objFile) = "msg" Then
    
        'Open msg file
        Set objItem = Session.OpenSharedItem(objFile.Path)
        Debug.Print objItem.SenderEmailAddress

    End If
Next

End Sub

관련 정보