SMTP Roundtrip per PowerShell ermitteln

Hier mal wieder ein kleines Script aus der Reihe Quick and Dirty. Eigentlich ist das Script aus dem Hintergrund entstanden ein AntiSPAM Gateway zu überwachen, welches gern mal überlastet war und keine Mails mehr verarbeitet hatte. Leider stellten sich „Nur-Text“-Mails ohne Hyperlink oder sonstigem Content als nicht gerade aussagekräftig heraus, denn die wurden praktisch immer verarbeitet. Das Script sollte Alarm schlagen, wenn die Mails länger als eine gewisse Zeit im AntiSPAM Gateway hängen, also den SMTP Roundtrip messen. Es kam aber so nie zum Einsatz. Also gibt es hier eine etwas abgewandelte Version um zumindest die Zeit zu messen, die eine Mail vom Verschicken, bis zum Empfang braucht. Das Script kann in der Exchange Management Shell ausgeführt werden:

SMTP Roundtrip

Wer es gebrauchen kann, kann es auch etwas anpassen um beispielsweise Alarm zu schlagen, wenn keine Mails mehr ankommen, oder gesendet werden können.

Einfach das folgende Script in eine PS1 Datei kopieren und die ersten 3 Zeilen entsprechend anpassen:

$recipient = "frank@frankysweb.de"
$smtpserver = "smtp.frankysweb.local"
$sleep = 15

write-host ""
$start = (get-date).AddMinutes(-20)
$end = (get-date).AddMinutes(+20)
$subject = get-random

write-host "Sendig Testmail with Subject: $subject"
$sendtime = get-date
Send-MailMessage -SmtpServer $smtpserver -From $recipient -To echo@tu-berlin.de -Subject $subject -Body $subject

write-host "Waiting $sleep Seconds"
sleep -seconds $sleep

write-host "Getting Message Tracking Logs"
try
{
	$tracking = Get-TransportServer | Get-MessageTrackingLog -EventId RECEIVE -Recipients $recipient -start $start -end $end | where {$_.messagesubject -match "$subject"} | select timestamp,MessageSubject
}
catch
{
}

write-host ""
write-host "Results:"
write-host ""
if ($tracking)
{
	$receivetime = $tracking.TimeStamp
	$roundtrip = ($receivetime - $sendtime).totalseconds
	$roundtrip = [math]::Round($roundtrip,2)

	write-host "Found Message with Subject: $subject" -foregroundcolor green
	write-host "SMTP Roundtrip: $roundtrip Seconds" -foregroundcolor green
}
else
{
	write-host "Message with Subject not found: $subject" -foregroundcolor red
	write-host "Roundtrip TimeOut"
}

„Sleep“ gibt die Zeit in Sekunden an, die gewartet wird, bevor die Message Tracking Logs nach der gesendeten Mail durchsucht werden.

3 Gedanken zu „SMTP Roundtrip per PowerShell ermitteln“

  1. Schade eigentlich :-(

    Sehr geehrte Damen und Herren,
    echo.tu-berlin.de wurde zum 1.1.2018 eingestellt, Ihre E-Mails werden nicht gelesen.
    Technische Universitaet Berlin, Germany

    Antworten
  2. Hi,
    hier gibt es eine Alternative:
    echo(at)charite.de
    Die Mail benötigt allerdings gut 10 Minuten bis zur Antwort. Bitte auch die Nutzungsbedingung beachten:
    If you want to use this service for routine monitoring, you *MUST* ask postmaster(at)charite.de for permission before doing so.
    Gruß,
    Frank

    Antworten

Schreibe einen Kommentar