Tuesday, June 15, 2004

Exchange Message Tracking Logs Rss Feed Script

To do Message Tracking Log Reporting I wrote a little application using a Access database and some ASP pages which I posted up on OutlookExchange a while ago. This works pretty well but when it comes to constant monitoring of a mailbox it can be a little bit of a pain to keep logging on and checking.

RSS offers a real alternative for this type of functionality, it can give users the ability to be able to subscribe to a feed of new items going into a common mailbox. To create a rss feed its just a simple manner of creating a xml file that is formatted in the expected RSS format which can be found here.

As a first go at this what I did was take the my spam reporting script for this post and instead of creating a Html table as Ive done in this previous script what I do instead is produce a RSS feed file of all the SPAM that has been deleted via the IMF. Then all you need to do is publish this xml file on a web server and then subscribe to the feed in your aggregator of choice.

What I want to do with this is actually be able to aggregate the whole log and maybe create a separate feed for each user and then store that feed in their mailbox. Then users who have access to another person mailbox can then go in and subscribe to the feed so they can then receive updates of mail going in and out of that mailbox. Needs some work though.


set objdom = CreateObject("MICROSOFT.XMLDOM")
Set objField = objDom.createElement("rss")
Set objattID = objDom.createAttribute("version")
objattID.Text = "2.0"
objField.setAttributeNode objattID
objDom.appendChild objField
Set objField1 = objDom.createElement("channel")
objfield.appendChild objField1
Set objField3 = objDom.createElement("title")
objfield3.text = "IMF SPAM Report Feed"
objfield1.appendChild objField3
Set objField4 = objDom.createElement("link")
objfield1.appendChild objField4
Set objField5 = objDom.createElement("description")
objfield5.text = "IMF SPAM Report Feed"
objfield1.appendChild objField5
Set objField6 = objDom.createElement("language")
objfield6.text = "en-us"
objfield1.appendChild objField6
Set objField7 = objDom.createElement("lastBuildDate")
objfield7.text = formatdatetime(now(),1) & " " & formatdatetime(now(),4) & ":00 GMT"
objfield1.appendChild objField7
strComputer = "."
set shell = createobject("wscript.shell")
strValueName = "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias"
minTimeOffset = shell.regread(strValueName)
toffset = datediff("h",DateAdd("n", minTimeOffset, now()),now())
dtListFrom = DateAdd("n", minTimeOffset, now())
dtListFrom = DateAdd("d",-1,dtListFrom)
strStartDateTime = year(dtListFrom)
if (Month(dtListFrom) < 10) then strStartDateTime = strStartDateTime & "0"
strStartDateTime = strStartDateTime & Month(dtListFrom)
if (Day(dtListFrom) < 10) then strStartDateTime = strStartDateTime & "0"
strStartDateTime = strStartDateTime & Day(dtListFrom)
if (Hour(dtListFrom) < 10) then strStartDateTime = strStartDateTime & "0"
strStartDateTime = strStartDateTime & Hour(dtListFrom)
if (Minute(dtListFrom) < 10) then strStartDateTime = strStartDateTime & "0"
strStartDateTime = strStartDateTime & Minute(dtListFrom)
if (Second(dtListFrom) < 10) then strStartDateTime = strStartDateTime & "0"
strStartDateTime = strStartDateTime & Second(dtListFrom) & ".000000+000"
Set objWMIService = Getobject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\MicrosoftExchangeV2")
qstr = "Select * FROM Exchange_MessageTrackingEntry where entrytype = '1039' and OriginationTime > '" & strStartDateTime & "'"
Set colLoggedEvents = objWMIService.ExecQuery(qstr,,48)
spamcount = 0
spambytes = 0
For Each objEvent in colLoggedEvents
for i = 1 to objEvent.RecipientCount
OTime = objEvent.OriginationTime
odate = formatdatetime(cdate(DateSerial(Left(OTime, 4), Mid(OTime, 5, 2), Mid(OTime, 7, 2))),1) & " " _
& formatdatetime(timeserial(Mid(OTime, 9, 2),Mid(OTime, 11, 2),Mid(OTime,13, 2)),4) & ":00 GMT"
Set objField2 = objDom.createElement("item")
objfield1.appendChild objField2
Set objField8 = objDom.createElement("title")
objfield8.text = objEvent.clientip & " " & objEvent.SenderAddress & " " & objEvent.Subject & " " & objEvent.size
objfield2.appendChild objField8
Set objField9 = objDom.createElement("link")
objfield9.text = ""
objfield2.appendChild objField9
Set objField10 = objDom.createElement("description")
objfield10.text = objEvent.clientip & " " & objEvent.SenderAddress & " " & objEvent.RecipientAddress((i-1)) _
& " " & objEvent.Subject & " " & objEvent.size
objfield2.appendChild objField10
Set objField11 = objDom.createElement("author")
objfield11.text = objEvent.RecipientAddress((i-1))
objfield2.appendChild objField11
Set objField12 = objDom.createElement("pubDate")
objfield12.text = odate
objfield2.appendChild objField12
set objfield2 = nothing
set objfield8 = nothing
set objfield9 = nothing
set objfield10 = nothing
set objfield11 = nothing
next
next

Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)

objdom.save("c:\inetpub\wwwroot\spam.xml")

No comments: