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
-
Arron Staff
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.
-
Arron Staff
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.
-
Arron Staff
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🙌