需要些一个从外部控制exchange邮件的程序。程序的目的是将管理员的邮件定期删除,保留一定时间的邮件再邮箱内。
下面写一下我的编程学习过程和需要注意的问题。
这个东西说实话我是从0开始学起,以前没有做过相应的exchange编程。
1、账号纪录的获得:
公司的邮件比较特殊,主域服务器在国内,而另外一个服务器在新加坡。2个服务器都有exchange服务器。用的是同一个域名。而管理员的账号在国外。
开始我再本机作测试,返回错误信息,原因很快明白,必须要在exchange服务器上运行才能建立ExOLEDB.DataSource。
于是开始将测试脚本放到国内的服务器上,错误信息为服务器上没有相应的账号。于是找另一个国内账号来测试,成功。
下面开始取得账号内邮件的数目。cItems = Rs.RecordCount,成功
当我是用纪录集作循环的时候,问题出现了:rs.movenext不能使用,错误报告为:bookmark is invalid.但是movefirst和movelast都能后适用。查找了相关的资料,明白是服务器是2000使用的ado版本比较低而且有bug需要升级。天呢!!!!这个我可不好办了!于是继续索索方案,功夫不负有心人,有帖告诉我可以使用rs.move 1,0来代替。ok成功!
当我到新加坡的服务器上测试另外一个账号的时候,提示没有权限,于是将全县提高。成功!
2、记录的查询
取得第一个查询纪录的某个字段。失败。我是用了“select * from ........”,该换了具体字段的时候"SELECT ""urn:schemas:httpmail:datereceived"",""DAV:displayname"" FROM scope('shallow traversal of " & Chr(34) & sURL & Chr(34) & "') "才成功。不知道这个错误是否分析正确。
查询时间的时候注意要使用cast
注意时间的格式一定要正确,“1998-02-01T10:00“做好字符串的组合还有调整系统时间的格式。
3、记录的删除
使用rs.delete 1来做删除(后文又另一种方法)
4、账号的地址
2种格式
sUrl="file://./backofficestorage/urserver.com.cn/MBX/administrator/Inbox"
sUrl="http://server/exchange/administrator/inbox"
5、删的比较爽,彻底的删除,不进回收站的!!!
给出源代码供大家参考指正。
sUrl="file://./backofficestorage/urserver.com.cn/MBX/administrator/Inbox"
Dim sFolderUrl
Dim sQuery
mytime = DateAdd("ww", -1, Date) ’ 保留一个星期
mytime=mytime&"T00:00:00Z" ‘注意必须使用这种格式,里面有个T,调整一下系统的时间格式
DateRng = " < CAST("""&mytime&""" as 'dateTime')" ‘注意使用cast转换
Dim Conn
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "ExOLEDB.DataSource"
Conn.Open sUrl
sQuery = "SELECT ""urn:schemas:httpmail:datereceived"",""DAV:displayname"" FROM scope('shallow traversal of " & Chr(34) & sURL & Chr(34) & "') "
squery = squery & "WHERE ""urn:schemas:httpmail:datereceived"" " & DateRng
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open sQuery, Conn
cItems = Rs.RecordCount
do while not rs.eof
'wscript.echo Rs.fields("urn:schemas:httpmail:datereceived").value & Rs.fields("DAV:displayname").value
rs.Delete 1
rs.movenext
loop
参考:
http://mint.cnblogs.com/articles/396402.html
http://mint.cnblogs.com/articles/396397.html