自动提取 Exchange 服务器上的电子邮件附件

自动提取 Exchange 服务器上的电子邮件附件

我创建了一个 Exchange 电子邮件帐户,通过该帐户我将每天收到带有三个不同 Excel 附件的电子邮件。

每个 Excel 附件都必须保存在三个不同文件夹之一中。

是否可以将 Exchange 服务器配置为自动执行此操作,还是必须编写一个脚本来监控帐户中的新电子邮件?

我相信它是一台 Exchange 2007 服务器。

答案1

我目前正在为此目的使用一个 python 脚本,它通过 POP3 登录到邮箱,​​然后下载附件并备份电子邮件,经过一些小的修改它可能会很好地满足您的需要,如果您愿意,您可以使用 py2exe 进行编译。以下是代码

PS:该代码最初由 Suresh Kesmar 编写(所有荣誉归于他);)

答案2

恐怕您必须使用脚本来完成此操作,因为 Outlook 喜欢保护您免受自己的侵害。以下说明来自这里。我做了一些修改以适用于您的 Excel 电子表格。请记住,如果它们来自 Excel 2007,则您必须在脚本中使用“xlsx”作为文件扩展名。

  1. 打开 Outlook。我使用的是 Outlook 2007,但这在 Outlook 2003 中也应该有效。转到工具>宏>Visual Basic 编辑器。
  2. 突出显示您的项目文件夹(在左上角的 PROJECT 窗格中;我仅使用了默认项目),右键单击并选择 Insert>Module。将以下代码复制并粘贴到编辑器的主窗口中:
[vb]Sub SaveAttachmentsToDisk(Item As Outlook.MailItem)

Dim olkFolder As Outlook.MAPIFolder, _

olkAttachment As Outlook.Attachment, _

objFSO As Object, _

strRootFolderPath As String, _

strFilename As String, _

intCount As Integer

‘Change the following path to match your environment

strRootFolderPath = "z:\www\departments\webreports\"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set olkFolder = Application.ActiveExplorer.CurrentFolder

If Item.Attachments.Count > 0 Then

For Each olkAttachment In Item.Attachments

If objFSO.GetExtensionName(LCase(olkAttachment.FileName))

=“xls”然后

strFilename = olkAttachment.FileName

intCount = 0

Do While True

If objFSO.FileExists(strRootFolderPath &

strFilename) 然后

intCount = intCount + 1

objFSO.deletefile (strRootFolderPath & strFilename)

Else

Exit Do

End If

Loop

olkAttachment.SaveAsFile strRootFolderPath & strFilename

End If

Next

End If

Set objFSO = Nothing

Set olkAttachment = Nothing

Set olkFolder = Nothing

End Sub[/vb]
  1. 您需要确保设置了正确的安全级别,以便正确处理脚本。在 Outlook 中,转到“工具”>“宏”>“安全”。我选择了“不对宏进行安全检查”。对于您的环境来说,这个限制可能太宽松;如果是这样,请尝试下一个最高设置。

  2. 创建一条新的 Outlook 规则(工具>规则和警报)以反映您的更改。我的规则查找来自特定电子邮件地址的新邮件并带有附件(我要移动的 Web 文件),将邮件移动到特定文件夹(这样我就可以备份邮件/附件),然后运行上述模块/脚本将 Web 文件移动到适当的 samba 共享。我的规则描述如下:

Apply this rule after the message arrives
from [email protected]  
and which has an attachment  
and on this machine only  
move it to the WEBBACKUP folder  
and run Project1.SaveAttachmentsToDisk
  1. 点击“应用”和“确定”以保存规则。需要注意以下几点:这是客户端规则,因此您必须保持 Outlook 运行才能处理规则。此外,代码将覆盖任何与附件同名的文件(在我的情况下,在目标 samba 共享中)。如果您只想复制,您可以在附件名称后附加一个数字。为此,请替换以下代码行:

objFSO.deletefile (strRootFolderPath & strFilename)

strFilename = "副本 (" & intCount & ") " & olkAttachment.FileName

相关内容