在Outlook中,OOF(Out of Office)助理是一种自动回复功能,可以在用户不在线时自动回复收到的邮件。本文将介绍如何通过VBScript脚本和任务计划程序,实现在用户设置“外出”日程时自动开启OOF助理,并在没有“外出”日程时自动关闭。
该功能通过外部使用CDO(Collaboration Data Objects)库,并结合任务计划程序实现。例如,可以设置任务计划每30分钟检查一次。此外,也有内部解决方案,可以在CDOLive找到。但在实现过程中,可能会遇到MAPI问题,导致Outlook中的OOF消息与脚本中修改的消息不同步。
每个希望参与自动切换OOF助理的用户,至少需要在其OOF消息中设置一个(可配置的)占位符,以显示最终消息中的日期(例如,“外出了
“from”和“to”可以根据脚本中配置的语言进行替换,目前支持德语和英语。相应的占位符为
完成这些设置后,用户只需将缺席时间设置为“外出”日程或全天事件。OOFAutomation脚本将为他完全自动切换OOF助理。管理员可以通过将日志记录到指定文件来支持管理(见下文安装说明)。
安装过程包括将两个脚本复制到OOFAutomation服务器可访问的文件夹中。这可以是任何安装了Outlook或Exchange Server的桌面PC或服务器。虽然尚未检查是否也可以安装单独提供的CDO库,但根据Microsoft在下载页面上的说明,应该是足够的。
将脚本复制到目标文件夹后,在OOFAutomation服务器上创建一个定时任务来启动脚本,例如,每30分钟启动一次。运行任务的帐户需要在Exchange中具有管理权限,或者至少具有访问所有最终用户MAPI存储的权限。但在激活任务之前,需要配置这两个脚本。
VBScript
' 配置:将"ServerName"更改为Exchange服务器名称
Const sServerName = "OEBFASRV02"
' 配置:将"MailboxName"更改为上述服务器上的一个管理邮箱名称
Dim sProfileInfo
sProfileInfo = sServerName & vbLf & "Administrator"
' 配置:更改占位符和前缀以反映使用的语言(最多2种,如果需要更多,则需要自己修改代码...)
Const placeHolderLang1 = ""
Const placeHolderLang2 = ""
Const infixFrom1 = "von "
Const infixFrom2 = "from "
Const infixTo1 = "bis "
Const infixTo2 = "to "
Const infixOn1 = "am "
Const infixOn2 = "on "
' 配置:在发生错误时发送邮件给这些人
Const ErrMailDistributionList = "rkapl"
Log.vbs是一个单独可用的简单Logger类。它可以在其他脚本中按如下方式使用:
VBScript
Set WshShell = WScript.CreateObject("WScript.Shell")
ExecuteGlobal CreateObject("_").Scripting.FileSystemObject.OpenTextFile("Log.vbs", 1).ReadAll
' PathToLogFolder.. (默认值为Log.vbs中的defaultLogPath)
' NameOfLogFile.. (默认值为脚本名称)
' maxLevelToBeLogged.. 0 = ERROR, 1 = WARN, 2 = INFO, 3 = DEBUG (默认值)
' CommaSeparatedErrMailDistributionListString...
' 例如 "admin1, admin2, admin3" (默认值为Log.vbs中的defaultMailRecipients)
' ErrMailSender.. (默认值为Log.vbs中的defaultMailSender)
' ErrMailSubject.. (默认值为Log.vbs中的defaultMailSubject)
Set theLogger = new_Logger(Array(PathToLogFolder, NameOfLogFile, maxLevelToBeLogged, CommaSeparatedErrMailDistributionListString, ErrMailSender, ErrMailSubject))
theLogger.LogInfo("Info Message")
theLogger.LogWarn("Warning Message")
theLogger.LogError("Error Message")
theLogger.LogStream (WshShell.Exec object)
' 将Exec对象的stderr输出记录为LogError消息,其他所有消息记录为LogInfo
theLogger.LogFatal("Fatal Message (stops the script)")
但是,在开始使用之前,也需要进行配置:
VBScript
' 配置:在发生错误时发送邮件给默认的人(如果脚本中未设置)
Const defaultMailRecipients = "rkapl,any,other,person"
' 配置:错误邮件的默认发件人
Const defaultMailSender = "Administrator"
' 配置:错误邮件的默认主题
Const defaultMailSubject = "Process Error"
' 配置:内部错误记录的文件
Const internalLogFile = "\\path\to\your\internal\log\files\Log.vbs.internalErrs.log"
' 配置:日志文件存放的文件夹
Const defaultLogPath = "\\path\to\your\Logs"
最后,激活任务并通过在OOF消息文本中输入配置的占位符进行测试。设置一个开始时间在现在-1分钟,结束时间在现在+1分钟的“外出”日程。