近来被要求做个基于VSS6.0的自动邮件发送程序,功能是要把一天内所有指定项目的变更情况汇总后进行发送。之前从来没有接触过VSS API的使用,MSDN上查了半天也没发现有这功能的API,网上这方面的资料也是少得可以了,不过还是找到两个,一个是采用bat进行的,一个是现成的软件vssplus。
----------
    先来说说采用bat的(摘自 http://duron2.spaces.live.com/blog/cns!7929628afd7b5ae2!198.entry)
    在vss项目的option里设置journal.log:\\ip\<project>\journal.log
    编写发邮件的脚本(脚本里要调用nc.exe来发邮件)定时运行:
    
        echo ehlo cn-dos>nc.conf
        echo AUTH LOGIN>>nc.conf
        rem 用户名Base64编码
        echo coded-username>>nc.conf
        rem 密码Base64编码
        echo code-password>>nc.conf
        rem "<" 前使用了转义符 "^"
        echo mail from: ^<username@aaa.com^>>>nc.conf
        echo rcpt to: ^<rpt@bbb.com^>>>nc.conf                             //多个收信人另加一行
        echo data>>nc.conf
        echo From: username@aaa.com>>nc.conf            //此处地址只是显示用
        rem 收信人
        echo To: rcpt@cbbb.com;rpt2@ccc.com>>nc.conf    //此处地址只是显示用
        echo Subject: vss-doc文挡变更>>nc.conf
        echo MIME-Version: 1.0>>nc.conf
        echo Content-Type: text/plain>>nc.conf
        rem 空一行
        echo.>>nc.conf
        fc    d:\VSS_pj1\journal.log d:\VSS_pj1\journal-old.log>>nc.conf
        rem 将现在journal.log的拷贝一份
        copy /y d:\VSS_pj1\journal.log d:\VSS_pj1\journal-old.log
        echo .>>nc.conf
        echo quit>>nc.conf
        rem 检查nc.conf 里有没有“找不到相异处”字符串,没有(也就是文件有改变就发信)
        rem smtp服务器 192.168.1.3 端口 25
        find "找不到相异处" nc.conf
        if ERRORLEVEL = = 1 c:\nc -nvv 192.168.1.3 25 < nc.conf

    这个是相当的简单了,写个bat,设置上相应的参数后保存,定时运行就好,发邮件部分是OK了,只是发送的文件可能还要再做相关的处理,毕竟看log还是有些不方便,看来还是要用VSS的API扩展功能。
----------
    还有一个是现成的软件vssplus,开源的,功能说明可以看  http://web.asai.com.cn/products/vssplus/function/
    主要功能:
    (1)自动下载最新文件到指定的目录
    根据用户配置,VssPlus可以将VSS服务器中文件的最新版本下载到指定目录。
    ◆通过目录共享,用户不使用VSS客户端也可以很方便读取到下载后的最新文件;
    ◆通过架设FTP、WEB等方式,用户可以远程读取到下载后的最新文件;
    (2)定期对文件进行检索,并将检索结果列表发送到指定邮件根据用户配置,VssPlus可以对VSS中的文件进行检索,并将符合检索选项的文件列表发送到指定的邮件地址。通过该功能,用户可以
    ◆及时了解文件的变更情况;
    ◆根据变更列表进行Code Review;
    ◆可以及时获取最新版本的文件;
    ◆可以了解哪些人员在check in文件时未填写评论(Comment);
    (3)定期生成报告根据用户配置,VssPlus将为指定目录下的每个文件生成每日报告,详细记录各个文件的变更履历:变更时间、变更者、变更原因,报告以html方式提供,用户可以将其存放在web目录,这样通过网站就可以及时了解文件的变更情况。
    (4)手动检索提供可视化检索界面,用户可以手动配置检索选项,对VSS的文件进行检索,并将检索结果列表导出到指定文件。

    看起来是相当不错,第2点就是我要的功能,在 http://sourceforge.net/projects/vssplus/ 下到了软件,最新的版本是1.1.002,但没找到源代码,从说明上看应该是开源的,不知道是不是他们放上去时没有一起放上,刚发了邮件与其公司联系,不知道之后会不会放上去。不过对我来说,可能直接用这个就行了,就算不是开源的也是免费的,只是想看看其源码中的实现方式。

    在本地上安装并进行了简单的试用,应该说不是很难使用的软件,里面也有一份很详细的使用说明,要注意下是先装EmailAgent。程序上提供了相当详细的设定方式,比先前自己设想的要复杂的多,但使用上还是比较直观的。只是其主要是对vss的扩展吧,对vss只能进行查看和get操作,要是能直接在上面进行checkout、checkin等操作的话,就可以直接用这个来操作vss了。

    EmailAgent这个程序应该是把邮件发送做成了个系统服务,这点倒是不错,应该可以用在其它程序上,从程序的运行上看,应该是通过生成特定的包含邮件信息的XML文件,再通过操作未发送、已发送和发送失败三个文件夹来实现的,这个邮件的XML文件应该是直接序列化出来的,整个实现应该是一定时间间隔的轮询来实现的,期待源代码。

    总的来说,关于VSS的邮件发送的功能,要是只是简单发送某个文件(就像上面说的log)而已,写个bat可能更加简单也更快些,不用安装什么。如果要功能更加强大的邮件发送功能的话,vssplus倒是可以拿来试试,只是不知道稳定性怎么样,这就要用时间来衡量了。