KutoolsforOffice — 一套方案,五大工具。事半功倍。三月特賣:20% 折扣

如何在郵件抵達 Outlook 時自動列印附件?

作者Siluvia修改日期

本教學將示範如何結合 VBA 腳本與 Outlook 規則,在特定郵件抵達時自動列印其附件。


在特定郵件抵達時自動列印附件

若您希望自動列印來自特定寄件者的郵件附件,請依照下列步驟完成設定。

步驟 1:在 Outlook 中建立腳本

首先,您需要在 Outlook 中建立一個 VBA 腳本。

1. 啟動 Outlook,同時按下 AltF11 鍵,即可開啟 Microsoft Visual Basic for Applications 視窗。

2. 在 Microsoft Visual Basic for Applications 視窗中,雙擊 Project 1Microsoft Outlook 物件ThisOutlookSession,即可開啟 ThisOutlookSession (程式碼)視窗,並將下列程式碼貼入該視窗中。

Outlook 收到郵件時自動列印附件的步驟

VBA 程式碼 1:在郵件抵達時自動列印附件(所有類型的附件)

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xTempFolder & "\" & xAtt.FileName
      xAtt.SaveAsFile (xFileName)
      Set xFolderItem = xFolder.ParseName(xFileName)
      xFolderItem.InvokeVerbEx ("print")
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

注意:此程式碼支援列印郵件中收到的所有類型附件。若您只想列印特定類型的附件(例如 PDF 檔案),請使用下列 VBA 程式碼。

VBA 程式碼 2:在郵件抵達時自動列印指定類型的附件

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileType As String, xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xAtt.FileName
      xFileType = LCase$(Right$(xFileName, VBA.Len(xFileName) - VBA.InStrRev(xFileName, ".")))
      xFileName = xTempFolder & "\" & xFileName
      Select Case xFileType
        Case "pdf"   'change "pdf" to the file extension you want to print
          xAtt.SaveAsFile (xFileName)
          Set xFolderItem = xFolder.ParseName(xFileName)
          xFolderItem.InvokeVerbEx ("print")
      End Select
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
  Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

注意事項

1. 在套用此 VBA 程式碼以僅列印來信中的 Pdf 文件之前,您需先下載並安裝 Adobe Acrobat Reader,並將其設為電腦上的預設 PDF 閱讀器。
2. 在程式碼行 Case "pdf"中,請將 "pdf"改為您要列印的檔案副檔名。

3. 點選工具 參考項目。在彈出的 參考項目 – Project 1 對話方塊中,勾選 Microsoft Scripting Runtime 核取方塊,然後按一下確定按鈕。

Outlook 收到郵件時自動列印附件的步驟

4. 儲存程式碼後,按下 AltQ 鍵,即可關閉 Microsoft Visual Basic for Applications 視窗。

注意:請確保您的 Outlook 已啟用啟用所有巨集選項。您可依照下列步驟檢查此設定。

Outlook 收到郵件時自動列印附件的步驟
步驟 2:建立規則以使用腳本

在 Outlook 中新增 VBA 腳本後,您需要建立一條規則,以便在符合特定條件時自動執行該腳本。

1. 切換至「首頁」索引標籤,按一下規則 管理規則與警示

Outlook 收到郵件時自動列印附件的步驟

2. 在規則與警示對話方塊中,點擊新增規則按鈕,立即建立您的自訂規則!

提示:若您已在 Outlook 中新增多個電子郵件帳戶,請於將變更套用至此資料夾下拉式選單中指定要套用規則的帳戶;否則,規則將自動套用至目前預設帳戶的收件匣。

Outlook 收到郵件時自動列印附件的步驟

3. 在第一個規則嚮導對話方塊中,於 步驟 1 選取將規則套用至我收到的郵件,然後按一下下一步。

Outlook 收到郵件時自動列印附件的步驟

4. 在第二個規則嚮導對話方塊中,您需:

4.1)根據需求在 步驟 1 方塊中指定一個或多個條件;
在此案例中,我希望僅列印來自指定寄件者的來信附件。因此我勾選了來自特定人員或公開群組核取方塊。
4.2)按一下 步驟 2 方塊中的底線值以編輯條件;
4.3)按一下下一步。請參閱截圖:
Outlook 收到郵件時自動列印附件的步驟

5. 在第三個規則嚮導對話方塊中,請依下列方式進行設定。

5.1) 在 步驟 1:選取動作區段,勾選執行指令碼核取方塊;
5.2) 在 步驟 2 區段中,按一下底線文字「指令碼」;
5.3) 在開啟的選取指令碼對話方塊中,按一下您上方新增的 VBA 程式碼名稱,然後按一下確定;
5.4) 按一下下一步按鈕。請參閱螢幕截圖:
Outlook 收到郵件時自動列印附件的步驟

提示:若您的執行腳本選項在規則嚮導中遺失,請依照本文方法恢復顯示該選項:在 Outlook 規則中還原遺失的「執行腳本」選項

6. 接著會彈出另一個規則嚮導對話方塊,詢問是否要設定例外條件。如有需要,可選取例外條件;若無,請直接點選下一步按鈕。

Outlook 收到郵件時自動列印附件的步驟

7. 在最後一個規則嚮導對話方塊中,請為規則指定名稱,然後點選完成按鈕。

Outlook 收到郵件時自動列印附件的步驟

8. 在完成設定後,將返回規則與警示對話方塊,您可看到所建立的規則已列於其中,按一下確定按鈕即可完成全部設定。

Outlook 收到郵件時自動列印附件的步驟

從現在起,只要收到指定人員寄來的郵件,附件就會自動列印。


相關文章

僅列印 Outlook 中單封郵件或所選郵件的附件
在 Outlook 中,您可以列印郵件,但是否曾想過只列印單封郵件或所選郵件中的附件?本文將為您介紹實現此需求的實用技巧!

僅列印 Outlook 中郵件的訊息標頭
在 Outlook 中列印郵件時,系統會同時列印訊息標頭與內文。然而在某些特殊情況下,您可能只需要列印包含主旨、寄件者、收件者等資訊的訊息標頭。本文將為您介紹兩種實用解決方案,助您輕鬆掌握!

在 Outlook 中以指定/自訂日期範圍列印行事曆
通常在 Outlook 中以「月」檢視列印行事曆時,系統會自動選取包含目前所選日期的月份。但若您需要列印自訂日期範圍(例如 3 個月或半年)的行事曆,本文將為您介紹實用的解決方法!

在 Outlook 中列印包含相片的聯絡人
通常在 Outlook 中列印聯絡人時,不會一併列印其相片。但若能同時印出相片,將大幅提升辨識度!本文將為您介紹幾種實用的變通方法,輕鬆達成此目的。

在 Outlook 中列印郵件的特定內容
當您收到一封郵件,卻只需要列印其中部分內容而非整封郵件時,該如何處理?其實,Outlook 可透過瀏覽器(例如 Firefox 與 Internet Explorer)協助您輕鬆完成!以下將以瀏覽器為例,請參閱下列教學步驟。

更多關於「在 Outlook 中列印」的文章……


最佳 Office 生產力工具

體驗全新 Kutools for Outlook,內含 100+ 項超強功能!立即點擊下載!

🤖KUTOOLS AI運用先進 AI 技術,輕鬆處理電子郵件——無論是回覆、摘要、優化、擴充、翻譯還是撰寫郵件,通通一鍵搞定!

📧 郵件自動化自動答覆(支援 POP 與 IMAP)預約寄送郵件寄信時依規則自動抄送密送自動轉發(高級規則)自動加入問候語自動將多收件人郵件拆分為個別訊息……

📨 郵件管理撤回郵件依主旨等條件封鎖詐騙郵件刪除重複郵件高級搜尋整合文件夾……

📁 附件專業版批次儲存批次解除附加批次壓縮自動保存自動拆離自動壓縮……

🌟 介面魔法😊更多精美酷炫表情符號重要郵件來到時提醒您最小化 Outlook 而非關閉……

👍 一鍵奇蹟帶附件全部答復防釣魚郵件🕘顯示發送者當前時間時區……

👩🏼‍🤝‍👩🏻 聯絡人與行事曆從選取的郵件中批次新增聯絡人將聯繫人組拆分為個別群組移除生日提醒……

用您的慣用語言暢享 Kutools — 完整支援英文、西班牙文、德文、法文、中文等 40 多種語言!

立即一鍵解鎖 Kutools for Outlook!別再等待,馬上下載,全面提升工作效率!

kutools for outlook features1kutools for outlook features2

🚀 一鍵下載 — 立即取得所有 Office 增益集

強烈推薦:Kutools for Office(5 合 1)

一鍵下載五個安裝程式,一次完成 — Kutools for Excel、Outlook、Word、PowerPointOffice Tab Pro立即點擊下載!

  • 一鍵便利:只需一次操作,即可下載全部五個安裝套件!
  • 🚀 隨時應對任何 Office 任務:按需安裝所需增益集,立即提升工作效率!
  • 🧰 包含:Kutools for Excel/Kutools for Outlook/Kutools for Word/Office Tab Pro/Kutools for PowerPoint