利用宏避免发送确认邮件时忘记添加附件
团队的邮件周知流程在不断规范,对邮件格式当然也做出了很多要求。在刚开始的阶段,大家都还不是很熟练,于是频频出现聚精会神地把邮件内容处理完以后,还没有把制作完成的html附件添加到邮件里就点击了发送按钮。虽然Outlook支持邮件撤回功能,但是那个撤回功能实在是太SB了(谁用谁知道……)。当然我们也可以设置延迟发送,这样可以在一定程度上解决问题,但是如果你发送邮件后就去干别的了,那么延迟发送显然也不保险。所以最安全的方式还是在发送邮件时,如果是重构完成的确认邮件,并且又没有添加html附件,就弹出警告阻止发送。我做了一个Outlook的加载项实现这个功能,但是试验证明部署兼容性还是有一些问题(在一同事的Win7 x64 + Office 2007 x86上安装后不能加载)。所以这里分享一下用宏实现的方法。当然你也可以先尝试一下加载项能否在你的电脑上正常工作,可以的话就不用搞这么复杂了:下载ISD WebTeam 重构邮件附件检查加载项For Outlook 2007/2010
准备工作
Office的默认设置在各个版本中各有不同,为了保证后面的步骤能够顺利,我们可以先做一些准备工作:
- “文件 → 选项”,弹出Outlook选项页面(Outlook 2007以前的版本可能在“工具”下直接就有宏,可以跳到第3步)。
- 在左侧导航区域选择“自定义功能区”,最右侧的“主选项卡”拉到最下面,勾选“开发工具”(图1)。
- 在左侧导航区域选择“信任中心”,右侧点击“信任中心设置”(图2),弹出信任中心页面(Outlook 2007以前版本可能在“工具”下直接就有“信任设置”)。
- 左侧点击“宏设置”,右侧勾选“为所有宏提供通知”(图3)。
图1:显示开发工具
图2:打开信任中心设置
图3:设置宏安全性
编写宏
完成准备工作后,回到Outlook主界面,主选项卡上多了一个“开发工具”选项卡。点击打开“开发工具”选项卡,并点击其下的“Visual Basic”(Outlook 2007 以前的版本中可能在“工具”下的“宏”子菜单里就有),如图4。
图4:打开Visual Basic
在“Microsoft Visual Basic for Application”编辑器中,展开左侧的“Microsoft Outlook 对象”并双击“ThisOutlookSession”,打开编辑器,然后把以下代码粘贴到编辑窗口中(图5):
Option Explicit
Private Sub Application_ItemSend(ByVal Item As Object, ByVal Cancel As Boolean)
Dim fileCount As Integer
Dim attach As Attachment
Dim msg As String
fileCount = 0
msg = "你尚未添加网页附件,确定要发送吗?"
If (InStr(Item.Subject, "重构待确认?") > 0 And fileCount < 1) Then
For Each attach In Item.Attachments
If InStr(attach.FileName, "htm") > 0 Or InStr(attach.FileName, "html") > 0 Then
fileCount = fileCount + 1
End If
Next attach
If (MsgBox(msg, vbYesNo + vbDefaultButton2 + vbExclamation, "附件检查") = vbYes) Then
Cancel = False
Else
Cancel = True
End If
End If
End Sub
代码说明:这段代码的作用是在邮件发送事件发生时,首先检查邮件主题是否包含“重构待确认”字样(根据重构周知邮件规范),如果是,则检查是否包含后缀名为"html"或者"htm"的附件(必须检查后缀,因为签名中就有一张图片作为附件,同时邮件中也有可能有数量不定的图片附件)。如果有html附件则邮件继续发送,否则弹出警告,要求你确认添加附件(这样保证了如果真的不需要网页附件,也不会不能发送邮件)。
图5:粘贴宏代码
然后点击左上角的保存按钮(CTRL+S),关闭宏编辑器,退出Outlook。
启用宏
重新打开Outlook,由于我们的宏没有进行数字签名,所以默认是没有启用的,启动时Outlook会弹出提示,请在弹出的提示框中点击“启用宏”(如图6,我的截图中第一项可用是因为进行了宏的数字签名,这个没有影响)。
图6:启动提示,启用宏
至此,我们的设置就完成了。你可以编写一封新邮件作为测试,在主题中包含“重构待确认”字样,不添加任何html网页文件作为附件,收件人最好写自己。然后点击“发送”,就会看到如下提示:
图7:宏测试
看到这个图说明宏已经正常工作,点击“否”即可停止发送,然后补上附件重新发送。如果不需要html附件,只要点“是”即可。
Enjoy It!
- 一些sql用法例子【Updating】
- 关于腾讯的一道字符串匹配的面试题
- Sort Map by Value in Java
- java 利用反射模拟动态语言的 eval 函数
- Spark函数讲解: combineByKey
- hadoop 里执行 MapReduce 任务的几种常见方式
- Pig、Hive、MapReduce 解决分组 Top K 问题
- Pig、Hive 自定义输入输出分隔符以及Map、Array嵌套分隔符冲突问题
- 新手教程:局域网DNS劫持实战
- 自定义 java 日期、时间 处理函数集
- MapReduce 中的两表 join 几种方案简介
- MapReduce中的自定义多目录/文件名输出HDFS
- 通过hiveserver远程服务构建hive web查询分析工具
- Hive 中内部表与外部表的区别与创建方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 爬取B站原视频的实例代码
- flink实战-使用自定义聚合函数统计网站TP指标
- 详解flink中Look up维表的使用
- 聊聊flink 1.11 中的随机数据生成器-DataGen connector
- flink实战教程-集群的部署
- Flink实战教程-自定义函数之标量函数
- Flink实战教程-自定义函数之TableFunction
- Flink教程-flink 1.11 流式数据ORC格式写入file
- Flink教程-使用sql将流式数据写入文件系统
- flink教程-flink 1.11 集成zeppelin实现简易实时计算平台
- flink教程-详解flink 1.11 中的CDC (Change Data Capture)
- flink教程-基于flink 1.11 使 sql客户端支持执行sql文件
- flink教程-详解flink 1.11 中的JDBC Catalog
- flink教程-flink modules详解之使用hive函数
- 面试iOS 机会在自己手中