我创建了一个 Exchange 电子邮件帐户,通过该帐户我将每天收到带有三个不同 Excel 附件的电子邮件。
每个 Excel 附件都必须保存在三个不同文件夹之一中。
是否可以将 Exchange 服务器配置为自动执行此操作,还是必须编写一个脚本来监控帐户中的新电子邮件?
我相信它是一台 Exchange 2007 服务器。
答案1
我目前正在为此目的使用一个 python 脚本,它通过 POP3 登录到邮箱,然后下载附件并备份电子邮件,经过一些小的修改它可能会很好地满足您的需要,如果您愿意,您可以使用 py2exe 进行编译。以下是代码。
PS:该代码最初由 Suresh Kesmar 编写(所有荣誉归于他);)
答案2
恐怕您必须使用脚本来完成此操作,因为 Outlook 喜欢保护您免受自己的侵害。以下说明来自这里。我做了一些修改以适用于您的 Excel 电子表格。请记住,如果它们来自 Excel 2007,则您必须在脚本中使用“xlsx”作为文件扩展名。
- 打开 Outlook。我使用的是 Outlook 2007,但这在 Outlook 2003 中也应该有效。转到工具>宏>Visual Basic 编辑器。
- 突出显示您的项目文件夹(在左上角的 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]
您需要确保设置了正确的安全级别,以便正确处理脚本。在 Outlook 中,转到“工具”>“宏”>“安全”。我选择了“不对宏进行安全检查”。对于您的环境来说,这个限制可能太宽松;如果是这样,请尝试下一个最高设置。
创建一条新的 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
- 点击“应用”和“确定”以保存规则。需要注意以下几点:这是客户端规则,因此您必须保持 Outlook 运行才能处理规则。此外,代码将覆盖任何与附件同名的文件(在我的情况下,在目标 samba 共享中)。如果您只想复制,您可以在附件名称后附加一个数字。为此,请替换以下代码行:
objFSO.deletefile (strRootFolderPath & strFilename)
和
strFilename = "副本 (" & intCount & ") " & olkAttachment.FileName