跳至主要内容

如何在Outlook中收到邮件时自动打印附件?

Author: Siluvia Last Modified: 2025-07-31

本教程演示了一种结合VBA脚本和Outlook规则的方法,帮助您在特定邮件到达Outlook时自动打印其附件。


当特定邮件到达时自动打印附件

假设您希望自动打印来自某个特定发件人的新邮件中的附件。您可以按照以下步骤操作来实现这一目标。

步骤1:在Outlook中创建脚本

首先,您需要在Outlook中创建一个VBA脚本。

1. 启动您的Outlook,同时按下 Alt + F11 键以打开 Microsoft Visual Basic for Applications 窗口。

2. 在 Microsoft Visual Basic for Applications 窗口中,双击 Project1 > Microsoft Outlook Objects > ThisOutlookSession 以打开 ThisOutlookSession (Code) 窗口,然后将以下代码复制到此代码窗口中。

steps of auto printing attachments when emails arrive in 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. 继续点击 工具 > 引用。在弹出的 References – Project1 对话框中,勾选 Microsoft Scripting Runtime 复选框,然后点击 确定 按钮。

steps of auto printing attachments when emails arrive in Outlook

4. 保存代码并按 Alt + Q 键关闭 Microsoft Visual Basic for Applications 窗口。

注意:请确保在您的Outlook中启用了“启用所有宏”选项。您可以通过以下步骤检查此选项。

steps of auto printing attachments when emails arrive in Outlook
步骤2:建立使用脚本的规则

在Outlook中添加VBA脚本后,您需要根据某些条件创建一个规则来使用该脚本。

1. 转到“主页”选项卡,点击 规则 > 管理规则和警报

steps of auto printing attachments when emails arrive in Outlook

2. 在“规则和警报”对话框中,点击 新建规则 按钮以创建规则。

提示:如果您在Outlook中添加了多个邮箱账户,请在“将更改应用于该文件夹”下拉列表中指定一个账户,以便应用规则。否则,它将应用于当前选定邮箱账户的收件箱。

steps of auto printing attachments when emails arrive in Outlook

3. 在第一个“规则向导”对话框中,在 步骤1框中选择“对收到的邮件应用规则”,然后点击 下一步

steps of auto printing attachments when emails arrive in Outlook

4. 在第二个“规则向导”对话框中,您需要:

4.1) 根据需要在步骤1框中指定一个或多个条件;
在这种情况下,我只想打印来自特定发件人的新邮件中的附件。在这里,我勾选了“来自个人或公共组”复选框。
4.2) 点击步骤2框中的带下划线的值以编辑条件;
4.3) 点击 下一步。参见截图:
steps of auto printing attachments when emails arrive in Outlook

5. 在第三个“规则向导”对话框中,您需要进行如下配置。

5.1) 在 步骤1:选择操作部分,勾选“运行脚本”复选框;
5.2) 在步骤2部分,点击带下划线的文字“一个脚本”;
5.3) 在打开的“选择脚本”对话框中,点击您上面添加的VBA代码名称,然后点击 确定;
5.4) 点击 下一步 按钮。参见截图:
steps of auto printing attachments when emails arrive in Outlook

提示:如果您的“规则向导”中缺少“运行脚本”选项,可以按照本文提到的方法显示它:恢复Outlook规则中缺失的“运行脚本”选项

6. 然后会弹出另一个“规则向导”,询问是否有例外情况。如有必要,您可以选择例外情况,否则直接点击 下一步 按钮不作任何选择。

steps of auto printing attachments when emails arrive in Outlook

7. 在最后一个“规则向导”中,您需要为规则指定一个名称,然后点击 完成 按钮。

steps of auto printing attachments when emails arrive in Outlook

8. 然后返回到“规则和警报”对话框,您可以看到所创建的规则已列在里面,点击 确定 按钮完成整个设置。

steps of auto printing attachments when emails arrive in Outlook

从现在开始,当收到指定人员的邮件时,附件将自动打印。


相关文章

仅在Outlook中打印一封邮件或选定邮件的附件 在Outlook中,您可以打印邮件,但您是否尝试过只打印某一封邮件或选定邮件中的附件呢?本文介绍了实现这一任务的技巧。

仅在Outlook中打印邮件头部 当在Outlook中打印邮件时,它会同时打印邮件头部和正文内容。然而,在某些特殊情况下,您可能只需要打印包含主题、发件人、收件人等信息的邮件头部。本文将介绍两种解决方案。

在Outlook中打印指定/自定义日期范围的日历 通常,在Outlook中以月视图打印日历时,它会自动选择包含当前选定日期的月份。但是,您可能需要打印自定义日期范围内的日历,例如3个月、半年等。本文将为您介绍解决方案。

在Outlook中打印带有图片的联系人 通常,在Outlook中打印联系人时,联系人的图片不会被打印出来。但有时,打印带有图片的联系人会更加令人印象深刻。本文将介绍一些解决方法。

在Outlook中打印邮件的部分内容 如果您收到一封电子邮件并发现需要打印的是邮件内容的一部分而不是整封邮件,您会怎么做?实际上,借助互联网浏览器(如Firefox和Internet Explorer),Outlook可以帮助您实现这一操作。这里我将以Internet浏览器为例。请查看以下教程。

更多关于“在Outlook中打印”的文章...


最佳 Office 办公效率工具

重磅消息:Kutools for Outlook 推出免费版本!

体验全新 Kutools for Outlook 免费版,70 多个强大功能,永久免费使用!点击立即下载!

🤖 Kutools AI 利用先进的AI技术轻松处理邮件,包括答复、总结、优化、扩展、翻译和撰写邮件。

📧 邮件自动化自动答复(支持POP和IMAP) /计划发送邮件 /发送邮件时根据规则自动抄送密送 / 自动转发(高级规则) / 自动添加问候语 / 自动将群发邮件拆分为单独邮件 ...

📨 邮件管理撤回邮件 / 按主题等方式阻止诈骗邮件 / 删除重复邮件 / 高级搜索 / 整合文件夹 ...

📁 附件专家批量保存 / 批量拆离 / 批量压缩 / 自动保存 / 自动拆离 / 自动压缩 ...

🌟 界面魔法😊更多精美个性表情 /重要邮件来临时提醒您 / 最小化而非关闭 Outlook ...

👍 一键高效操作带附件全部答复 /反钓鱼邮件 / 🕘显示发件人时区 ...

👩🏼‍🤝‍👩🏻 联系人与日历从选中的邮件批量添加联系人 / 将联系人组拆分为多个独立组 / 移除生日提醒 ...

使用 Kutools,支持英语、西班牙语、德语、法语、中文及40 多种其他语言,满足您的语言偏好!

一键解锁 Kutools for Outlook。无需等待,立即下载,提升办公效率!

kutools for outlook features1 kutools for outlook features2