[版权所有,转载请告知,并保存原作者名及文章在博客园的链接]

原因

最近收发的邮件越来越敏感。虽然自己小心翼翼但是有时候难免会发错,不过好记性不如烂笔头。决定花点时间研究一下如何在Outlook发邮件之前做一些必要的校验。要检验的是两个问题:

1. 我的工作环境是公司有自己的邮件系统,客户有另外一个邮件系统。因为我们在工作中和客户的系统是紧密相联的,部门中包括VP都有客户给的邮箱。而且,客户的邮件系统和Outlook结合的更好。所以,往往为了省事,大部分员工优先使用客户邮箱沟通所有的事情。但是,有些内容会涉及到本公司内部的信息,这是不应该使用客户邮箱来沟通的。

2. 发工作邮件没有标题是很糟糕的。虽然我极少犯此错误(印象中没有试过),但是犯错一次可能会有严重的不良影响。

工具

VS2010beta2,Outlook 2007/2010beta,VSTO 40,.Net Framework 3.5/4.0 beta2

VS2010beta2已经完成所有的功能开发,剩下的工作只是性能调优。所以,生成的代码应该可以无缝地RTM中继续使用。虽然不知道 .Net Framework 4.0什么时候发布,但VS2010是可以创建以前版本的工程文件。所以,为了使用者不需要安装临时的 .Net 4.0 beta,可以用 .Net 3.5配合 VSTO40创建功能。用户可以减少安装负担。

VSTO 40是随VS2010发布的针对Office的interop组件。

实现

其实没有什么技术含量。虽然从来没有使用过VSTO,网上的资料也不是很全,但2个小时基本上调试完成。共享出来的原因也就是为了减少大家搜索的时间而已。

 

 

ThisAddin.cs

 

 整个代码没什么神奇的地方。不再做详细的解释。这段代码也可以直接用在 .Net Framework 4.0的工程中。两者在本例并没有区别。

ViolateVITSensitive用来校验是否有违规的邮件地址。比如发件者的邮箱是alias@domain1.com。那么就不允许出现XXX@domain2.com 的收件人。发现违规会弹出提示,用户可以取消或者强制发送。

代码有不少可以优化的地方,比如所有的校验函数都可以做成DI(IoC)的模式(不过暂时没有必要。而且,这样只会扰乱只关心怎么用VSTO的读者)。

XML部分可以用lambda,不过我对这种在大部分情况只提高书写效率,并不会提高执行效率和调试效率的东西不太感冒(也可能是个人偏见,呵呵)。