100% found this document useful (2 votes)
772 views

Mail Flow Test

This script monitors email mailflow both internally and externally by sending test emails between mailboxes and checking that the messages are received. It takes comma separated lists of primary email addresses as input, sends test emails between all address pairs, and checks that the messages are received by querying the mailboxes using MAPI. It also has functions to send emails using CDO and retrieve mail aliases from Active Directory.

Uploaded by

santhoshlived
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
772 views

Mail Flow Test

This script monitors email mailflow both internally and externally by sending test emails between mailboxes and checking that the messages are received. It takes comma separated lists of primary email addresses as input, sends test emails between all address pairs, and checks that the messages are received by querying the mailboxes using MAPI. It also has functions to send emails using CDO and retrieve mail aliases from Active Directory.

Uploaded by

santhoshlived
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

REM Internal and External Mailflow - End to End Monitoring script

REM Inputs to be provided


REM Intra = Comma seperated within Quotes - Provide the Primary SMTP Addresses of
the mailboxes to test messages between Sites
REM Extra = Comma seperated within Quotes - same as Intra
REM IntGmailID = THe Email ID Gmail will autoforward the test mail to.
REM GmailID = Gmail ID which is configured to autoforward the mail to IntGmailID
and delete the message
REM smtp = Specify a Mailbox sever name or the BH server name, it is used to send
mails both internal and external.
REM aMbxserver = Specify a mailbox server name to create outlook connection
profile.
'-------------------------------
Configuration---------------------------------------------------------------------
----------------------------------------------------------------------------------
----'

Intra = "[email protected],[email protected]"
Extra = "[email protected],[email protected]"
IntGmailID = "[email protected]"
GmailID = "[email protected]"
smtp = "BH1"
aMbxserver = "MBS1"

'-------------------------------Do not Edit


Below-----------------------------------------------------------------------------
------------------------------------
tm = now
Subject = "test email from script at " & tm

'for intra check


Wscript.echo "-----Starting Intra mailflow test------------------------"
Wscript.echo ""
eArr = split(Intra,",")
Mode = "Internal"

If uBound(eArr) < 1 then Wscript.echo "Input atleast 2 Email address for internal
mailflow test"

for i = 0 to ubound(eArr)-1
for j = i+1 to ubound(eArr)
aFrom=trim(eArr(i))
aTo = trim(eArr(j))
Sendmail = SendMailByCDO(Subject, smtp, aFrom, aTo, mode)
Wscript.echo Sendmail & VbCrlf
Wscript.echo "Sleeping for 30 Seconds" & VbCrlf
Wscript.sleep(30000)

aMbx = GetAlias(aFrom)
dMbx = GetAlias(aTo)

Checkmsg = chkmsg(Subject,aMbxserver,aMbx,Mode)
Wscript.echo Checkmsg & VbCrlf
If Mode = "Internal" then
Mode = "External"
Delmsg = chkmsg(Subject,aMbxserver,dMbx,Mode)

Else
End If

next
next

Wscript.echo "------------Internal Done --------------------------" & VbCrlf


'For extra check

eArr = split(Extra,",")
Mode = "External"

Wscript.echo "-----Starting External mailflow test------------------------" &


VbCrlf
Wscript.echo ""

for i = 0 to ubound(eArr)

aFrom=trim(eArr(i))
aTo = GmailID
Sendmail = SendMailByCDO(Subject, smtp, aFrom, aTo, mode)
Wscript.echo Sendmail
Wscript.sleep(120000) & VbCrlf
Wscript.echo "Sleeping for 120 Seconds" & VbCrlf

aMbx = GetAlias(IntGmailID)
aMbxserver = "usoldtms006"
'Wscript.echo aTo
'Wscript.echo dMbx
Checkmsg = chkmsg(Subject,aMbxserver,aMbx,Mode)
Wscript.echo Checkmsg & VbCrlf
'If Mode = "Internal" then
'Mode = "External"
'Delmsg = chkmsg(Subject,aMbxserver,dMbx,Mode)

'Else
'End If

next

Wscript.echo "external tests Done"

Private Function SendMailByCDO(Subject, smtp, aFrom, aTo, mode)


Const cdoSendUsingPickup = 1
Const cdoSendUsingPort = 2
Const cdoSendUsingExchange = 3

Const cdoAnonymous = 0
Const cdoBasic = 1
Const cdoNTLM = 2

on error resume Next

Dim Message 'As New CDO.Message '(New - For VBA)


'Create CDO message object
Set Message = CreateObject("CDO.Message")

'Set configuration fields.


With Message.Configuration.Fields
'Original sender email address
.Item("http://schemas.microsoft.com/cdo/configuration/sendemailaddress")
= aFrom

'SMTP settings - without authentication, using standard port 25 on host


smtp
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") =
cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") =
25
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
smtp

'SMTP Authentication
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")
= 2
' .Item("http://schemas.microsoft.com/cdo/configuration/sendusername")
=""
' .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") =
""

.Update
End With

'Set other message fields.


With Message
'From, To, Subject And Body are required.
.From = aFrom
.To = aTo
.Subject = Subject

'Set TextBody property If you want To send the email As plain text
.TextBody = TextBody

'Set HTMLBody property If you want To send the email As an HTML


formatted
'.HTMLBody = TextBody

'Blind copy And attachments are optional.


If Mode = "Internal" then
'request the delivery status
.DSNOptions = 14
End If

'Send the email


.Send
End With

'Returns zero If succesfull. Error code otherwise


If Err.Number <> 0 Then
SendMailByCDO = "Error " & Err.Number & " - " & Err.description & "
Sending FROM " & aFrom & " TO " & aTo
ElseIf Err.Number = 0 Then
SendMailByCDO = "Sending FROM " & aFrom & " TO " & aTo
Else
SendMailByCDO = "Warning -mail Sent FROM " & aFrom & " TO " & aTo & " did
not reported the delivery"
End If
End Function

Private Function chkmsg(Subj,Server,mailbox,Mode)

on error resume Next

Dim objSession
Set objSession = CreateObject("MAPI.Session")
strProfileInfo = Server & vbLf & Mailbox
objSession.Logon "", "", False, True, 0, False, strProfileInfo

Set objFolder = objSession.inbox.messages

If err.number <> 0 Then


Chkmsg = "Error opening mailbox " & Mailbox & "-" & Err.description
End If

If Mode = "Internal" Then


Subj = "Delivered: " & Subj
End If

for each objmessage in objfolder


'Wscript.echo objmessage.subject
If objmessage.subject = Subj then
Chkmsg = "Recieved Msg Sent FROM: " & objmessage.Sender & " TO: " &
objmessage.recipients.item(1)
objmessage.delete
Delt = True
Subj = Replace(Subj,"Delivered: ","")
end If
next
If Delt <> True Then
ChkMsg = "Error recieveing message - " & Subj
End If
Subject
objSession.Logoff

End Function

Function GetAlias(Emailadd)

Dim oGC 'As IADsContainer


Dim oEntrprise 'As IADs

' Get the enterprise object from the GC namespace.


Set oGC = GetObject("GC:")
For Each child In oGC
Set oEntrprise = child
'Exit For
Next
'Setup ADODB connection

Set objConnection = CreateObject("ADODB.Connection")


objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

'Execute search command to look for Organization


objCommand.CommandText = _
"<" & oEntrprise.ADsPath & ">" & ";(&(mail=" & Emailadd &
"));mailNickName" & _
";subtree"
'Execute search to get Recordset
Set objRecordSet = objCommand.Execute

If objRecordSet.RecordCount = 0 Then
GetAlias = "Emailadd"
Else
While Not objRecordSet.EOF
GetAlias = objRecordSet.Fields("mailNickName")
objRecordSet.MoveNext
Wend
End If

End Function

You might also like