如何在Outlook中收到邮件时自动打印附件?
本教程演示了一种结合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) 窗口,然后将以下代码复制到此代码窗口中。

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
注意事项:
3. 继续点击 工具 > 引用。在弹出的 References – Project1 对话框中,勾选 Microsoft Scripting Runtime 复选框,然后点击 确定 按钮。

4. 保存代码并按 Alt + Q 键关闭 Microsoft Visual Basic for Applications 窗口。
注意:请确保在您的Outlook中启用了“启用所有宏”选项。您可以通过以下步骤检查此选项。

步骤2:建立使用脚本的规则
在Outlook中添加VBA脚本后,您需要根据某些条件创建一个规则来使用该脚本。
1. 转到“主页”选项卡,点击 规则 > 管理规则和警报。

2. 在“规则和警报”对话框中,点击 新建规则 按钮以创建规则。
提示:如果您在Outlook中添加了多个邮箱账户,请在“将更改应用于该文件夹”下拉列表中指定一个账户,以便应用规则。否则,它将应用于当前选定邮箱账户的收件箱。

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

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

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

提示:如果您的“规则向导”中缺少“运行脚本”选项,可以按照本文提到的方法显示它:恢复Outlook规则中缺失的“运行脚本”选项。
6. 然后会弹出另一个“规则向导”,询问是否有例外情况。如有必要,您可以选择例外情况,否则直接点击 下一步 按钮不作任何选择。

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

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

从现在开始,当收到指定人员的邮件时,附件将自动打印。
相关文章
仅在Outlook中打印一封邮件或选定邮件的附件 在Outlook中,您可以打印邮件,但您是否尝试过只打印某一封邮件或选定邮件中的附件呢?本文介绍了实现这一任务的技巧。
仅在Outlook中打印邮件头部 当在Outlook中打印邮件时,它会同时打印邮件头部和正文内容。然而,在某些特殊情况下,您可能只需要打印包含主题、发件人、收件人等信息的邮件头部。本文将介绍两种解决方案。
在Outlook中打印指定/自定义日期范围的日历 通常,在Outlook中以月视图打印日历时,它会自动选择包含当前选定日期的月份。但是,您可能需要打印自定义日期范围内的日历,例如3个月、半年等。本文将为您介绍解决方案。
在Outlook中打印带有图片的联系人 通常,在Outlook中打印联系人时,联系人的图片不会被打印出来。但有时,打印带有图片的联系人会更加令人印象深刻。本文将介绍一些解决方法。
在Outlook中打印邮件的部分内容 如果您收到一封电子邮件并发现需要打印的是邮件内容的一部分而不是整封邮件,您会怎么做?实际上,借助互联网浏览器(如Firefox和Internet Explorer),Outlook可以帮助您实现这一操作。这里我将以Internet浏览器为例。请查看以下教程。
最佳 Office 办公效率工具
重磅消息:Kutools for Outlook 推出免费版本!
体验全新 Kutools for Outlook 免费版,70 多个强大功能,永久免费使用!点击立即下载!
🤖 Kutools AI :利用先进的AI技术轻松处理邮件,包括答复、总结、优化、扩展、翻译和撰写邮件。
📧 邮件自动化:自动答复(支持POP和IMAP) /计划发送邮件 /发送邮件时根据规则自动抄送密送 / 自动转发(高级规则) / 自动添加问候语 / 自动将群发邮件拆分为单独邮件 ...
📨 邮件管理:撤回邮件 / 按主题等方式阻止诈骗邮件 / 删除重复邮件 / 高级搜索 / 整合文件夹 ...
📁 附件专家:批量保存 / 批量拆离 / 批量压缩 / 自动保存 / 自动拆离 / 自动压缩 ...
🌟 界面魔法:😊更多精美个性表情 /重要邮件来临时提醒您 / 最小化而非关闭 Outlook ...
👍 一键高效操作:带附件全部答复 /反钓鱼邮件 / 🕘显示发件人时区 ...
👩🏼🤝👩🏻 联系人与日历:从选中的邮件批量添加联系人 / 将联系人组拆分为多个独立组 / 移除生日提醒 ...
使用 Kutools,支持英语、西班牙语、德语、法语、中文及40 多种其他语言,满足您的语言偏好!
一键解锁 Kutools for Outlook。无需等待,立即下载,提升办公效率!

