Email Response Time Tracking | MDaemon Technologies, Ltd.

Email Response Time Tracking


  • Hello Everyone!

    I got a query from my client for tracking the email response time. They are using Mdaemon email server and outlook email client. Can anyone suggest viable product for this?

    Thanks 

    Noman



  • I suspect that most CRM solutions will offer some means of tracking response time.  A google search returned a number of third party products that might work for you, unfortunately I've never used any of them so I cannot make a reccomendation.

    In case its helpful, you can figure out response times manually.  When you reply to a message most email clients will add headers to the reply that can be used to link it to the original message.  Webmail uses the In-Reply-To: and References: headers.  The value of these headers in the Reply will be the message ID of the original message.  


  • Thanks Arron for the reply.

    Figuring out manually will take a lot of time, client just want the reponse and time of their different department. I think they don't use the CRM.

     


  • Yes, if you looked at each message using a text editor, it would take a long time, but if you wanted, you could write a script to do it for you.


  • If its helpful, I put together a script that demonstrates how you might do this.  It is just outputting the information to the screen, which isn't particularly helpful but it does tell you how long it took for each reply to be sent, assuming it can find the original email.

     

    function Load-EmlFile ($MSGFileName){
        
        if($MSGFileName -eq "" -or (!(Test-Path $MSGFileName)))
        {
            Write-Host "The File name, $MSGFileName, is empty or does not exist. This is a critical error.  The script will now exit."
            exit 1
        }
    
        $AdoDbStream = New-Object -ComObject ADODB.Stream
        $AdoDbStream.Type = 1
        $AdoDbStream.Open()
        $AdoDbStream.LoadFromFile($MSGFileName)
        $CdoMessage = New-Object -ComObject CDO.Message
        $CdoMessage.DataSource.OpenObject($ADoDBStream,"_Stream")
    
        $AdoDbStream.Close()
    
        return $CdoMessage
    }
    
    $SentItemsPath = "C:\MDaemon\Users\domain\mailbox\Sent Items.IMAP"
    $MailboxPath = "C:\MDaemon\Users\domain\mailbox\"
    
    ForEach($File in Get-ChildItem -Path $SentItemsPath -Filter *.msg){
    
        $MSG = Load-EmlFile $File.FullName
    
        $InReplyTo = $MSG.Fields.Item("urn:schemas:mailheader:In-Reply-To").Value
    
        If($InReplyTo){
            $ReplyDateTime = Get-Date ($MSG.SentOn)
    
            Write-Host "Reply sent for $InReplyTo at $ReplyDateTime, filename $($File.FullName)"
    
            $MSGIDPattern = "Message-ID: $InReplyTo"
            
            $OriginalEmailPath = (Get-ChildItem -Path $MailBoxPath -Recurse -File -Include *.msg | Where { $_.FullName -notlike "*\Sent Items.IMAP\*" -and $_.FullName -notlike "*\Deleted Items.IMAP\*"} | Select-String -Pattern $MSGIDPattern -AllMatches -SimpleMatch | Sort-Object LastWriteTime | Select-Object -Last 1).Path
    
            if($OriginalEmailPath){
                $OriginalEmail = Load-EmlFile $OriginalEmailPath
    
                $ReceiveDateTime = Get-Date ($OriginalEmail.ReceivedTime)
                Write-Host "Original email received at $ReceiveDateTime in file $OriginalEmailPath"
    
                $ResponseTime = New-TimeSpan -Start $ReceiveDateTime -End $ReplyDateTime
    
                Write-Host "The reply was sent in $($ResponseTime.TotalMInutes) minutes."
            } else {
                Write-Verbose "Original email not found."
            }
        }
    }

  • Really Appricate Arron for your help🙌


Please login to reply this topic!