Outlook VBA 스크립팅 – 첨부 파일 인쇄 및 이메일 이동

Outlook VBA 스크립팅 – 첨부 파일 인쇄 및 이메일 이동

저는 VB 스크립팅을 처음 사용하기 때문에 많은 도움이 필요합니다.

최근 이메일 계정이 변경되었다는 것은 내가 입력하지 않았으며 변경할 수 없는 규칙에 따라 수신된 이메일이 받은 편지함이 아닌 다른 폴더로 이동되었음을 의미합니다. 이를 Folder_X라고 부르겠습니다.

내가 하려는 것은 첨부 파일이 있는 Folder_X에 도착하는 모든 이메일의 첨부 파일을 자동으로 인쇄하는 것입니다. 첨부 파일이 인쇄되면 이메일을 다른 폴더(Folder_Y)로 이동합니다. 첨부 파일이 없는 이메일은 이동하면 안 됩니다.

이전에는 수신 메일에 대한 규칙을 사용하여 첨부 파일이 있는 경우 이를 Folder_Y로 이동하고 인터넷에서 찾은 다음 스크립트를 실행하여 첨부 파일을 인쇄할 수 있었습니다. 그러나 입력하지 않은 이 새로운 규칙 설정을 사용하면 규칙이 이미 폴더(Folder_X)에 있는 메일이 아닌 인바운드/아웃바운드 메일에서만 작동하므로 이전 규칙을 더 이상 사용할 수 없습니다.

Sub LSPrint(Item As Outlook.MailItem)
    On Error GoTo OError

    'detect Temp
    Dim oFS As FileSystemObject
    Dim sTempFolder As String

    Set oFS = New FileSystemObject
    'Temporary Folder Path
    sTempFolder = oFS.GetSpecialFolder(TemporaryFolder)
    'creates a special temp folder
    cTmpFld = sTempFolder & "\OETMP" & Format(Now, "yyyymmddhhmmss")
    MkDir (cTmpFld)

    'save & print
    Dim oAtt As Attachment

    For Each oAtt In Item.Attachments
      FileName = oAtt.FileName
      FullFile = cTmpFld & "\" & FileName

      'save attachment
      oAtt.SaveAsFile (FullFile)

      'print attachment
      Set objShell = CreateObject("Shell.Application")
      Set objFolder = objShell.NameSpace(0)
      Set objFolderItem = objFolder.ParseName(FullFile)
      objFolderItem.InvokeVerbEx ("print")
    Next oAtt

    'Cleanup

    If Not oFS Is Nothing Then Set oFS = Nothing
    If Not objFolder Is Nothing Then Set objFolder = Nothing
    If Not objFolderItem Is Nothing Then Set objFolderItem = Nothing
    If Not objShell Is Nothing Then Set objShell = Nothing

OError:

    If Err <> 0 Then
      MsgBox Err.Number & " - " & Err.Description
      Err.Clear
    End If

    Exit Sub
End Sub

이 스크립트를 폴더에서 작동하도록 조정하는 방법이나 이를 수행하는 다른 방법에 대한 제안 사항이 있으면 크게 감사하겠습니다.

답변1

ItemAdd 이벤트를 사용하면 항목이 폴더에 들어간 후 코드를 실행할 수 있습니다.

Option Explicit

'  In ThisOutlookSession
Private WithEvents addedItems As Items

Private Sub Application_Startup()
    ' Add as many  .folders(subfolder name) as is needed to navigate to the folder
    Set addedItems = Session.GetDefaultFolder(olFolderInbox).folders("folder_X").Items
End Sub

Private Sub addedItems_ItemAdd(ByVal Item As Object)

    Dim oAtt As attachment

    If Item.Attachments.count > 0 Then

        Debug.Print "Processing " & Item.subject

        For Each oAtt In Item.Attachments
            Debug.Print "Processing attachment."
        Next oAtt

        Item.move Session.GetDefaultFolder(olFolderInbox).folders("folder_Y")

    End If

End Sub

관련 정보