邮件跟踪日志的基础知识教程

互联网 | 编辑: 2007-05-24 00:30:00转载-投稿 一键看全文

浅析邮件日志(3)

对于统计邮件发送人的情况,我们需要建立另外一个集合,用于存贮每一封邮件的发送人的地址。如果当前发送人地址不在集合中,我们将把这个地址插入集合,并把相应的邮件数量置为初始值1。当我们发现这个邮件发送人的地址已经存在的话,我们就只要把相应邮件数量的值加1。 当完成整个日志文件的分析后,我们的集合对象就能给出想要的统计数据了。

下面是相关的VBScript代码。这个脚本能够分析统计日志文件中发送人的邮件地址,以及他相应发送邮件的数量。把源代码拷贝到一个文本文件中,并以.VBS为扩展名进行命名,例如:ParseLog.vbs。之后,通过以下命令运行脚本。(注:20070109.log是日志文件名。通常还需要提供文件路径。)

CScript ParseLog.VBS 20070109.log

===================代码开始===================
    ' 本代码的目的是为了更清楚地解释日志的格式和分析方法。仅供大家参考。
    ' 代码中对很多情况未作特殊处理。因此,作者不建议在生产环境中使用它。
    ' 如果因不当使用而引起的任何问题,作者不负任何责任。谢谢。
    Const conE2kMSGID = 9
    Const conSenderaddress = 19

    Dim MSGIDArray ' 用于统计MSGID的数组
    Dim OriginatorArray ' 用于统计Sender得数组
    Dim objFileSystem
    Dim strTrackingLogs
    Dim objCurrentLog
    Dim objKey

    Set MSGIDArray = CreateObject("Scripting.Dictionary")
    Set OriginatorArray = CreateObject("Scripting.Dictionary")
    MSGIDArray.CompareMode = vbTextCompare
    OriginatorArray.CompareMode = vbTextCompare

    ' 从命令行获取日志文件的路径
    strTrackingLogs = ""
    If WScript.Arguments.count = 1 Then
        strTrackingLogs = WScript.Arguments(0)
    Else
        WScript.Echo "Invalid Log File pathname!"
    End If

    Set objFileSystem = CreateObject("Scripting.FileSystemObject")
    If objFileSystem.FileExists( strTrackingLogs ) Then
        Set objCurrentLog = objFileSystem.OpenTextFile( strTrackingLogs,1, FALSE )
        ' 打开日志文件进行分析
        ParseTrackingLog( objCurrentLog )
    End If

    ' 显示统计结果
    For Each objKey In OriginatorArray
        WScript.Echo CStr(objKey) & ", " & OriginatorArray(objKey)
    Next

    Sub ParseTrackingLog(byRef objCurrentLog)
        'ON ERROR RESUME NEXT
        Dim rgStatusArray, strOriginator
        ' 跳过前5行文件头
        objCurrentLog.SkipLine
        objCurrentLog.SkipLine
        objCurrentLog.SkipLine
        objCurrentLog.SkipLine
        objCurrentLog.SkipLine

        Do While objCurrentLog.AtEndOfStream <> TRUE
            ' 按行读取列数据到数组里
            rgStatusArray = Split(objCurrentLog.ReadLine,Chr(9),-1,vbBinaryCompare)
            If UBound(rgStatusArray) = 20 Then
                ' 记录MSGID,判断该邮件是否被统计过
                If Not MSGIDArray.Exists( rgStatusArray(conE2kMSGID) ) Then
                    MSGIDArray.Add rgStatusArray(conE2kMSGID),1

                    strOriginator = rgStatusArray(conSenderaddress)
                    ' 记录发送人
                    If Not OriginatorArray.Exists( strOriginator ) Then
                    OriginatorArray.Add strOriginator, 1
                    OriginatorArray.Item(strOriginator)=OriginatorArray.Item(strOriginator)+1
                    End If
                End If
            End If
        Loop
    End Sub
    ===================代码结束===================

提示:试试键盘 “← →” 可以实现快速翻页 

总共 3 页< 上一页123
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑