I regularly test my remote mail servers (which use postfix - with
dovecot for authentication) to check they are live and functioning,
including that they are responding correctly to authorised login with
STARTTLS.

I currently use this (sorry about line breaks, the original is on one line):

timeout 20 /bin/bash -c "{ time (sleep 2; echo \"EHLO $(hostname
-f)\"; sleep 0.3; echo -n \"AUTH PLAIN \"; printf '%s\0%s\0%s'
\"$USERNAME\" \"$USERNAME\" \"$PASSWORD\"|base64; sleep 0.3; echo
\"QUIT\"; sleep 2; exit) | openssl s_client -connect $MX -starttls
smtp 2>/dev/null >${TMPF}0; } 2>${TMPF}2"

It usually works, but occasionally it gives timeout errors even though
the server is in fact ok. The problem is that the entire one-sided
conversation is piped through to openssl with preset time delays. Is
there a better way to do this (with a shell script) - in particular a
way to await (and check) the expected response from the server before
sending the next command in the sequence?

Reply via email to