# Lars Bjaerris # Version 0.2 # Argument checks if [[ ( $# == "--help" || $# == "-h") || ! ($# -eq 1 && $1 =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$) ]]; then echo -e "\nThis script takes an email address as argument." echo -e "Usage:\n$0 user@example.com \n" exit 1 fi # Define variables LOCAL_HOSTNAME=$(uname -n) #LOCAL_HOSTNAME="webinfo.proj.info-ufr.univ-montp2.fr" EMAIL_ADDR="$1" REMOTE_LOCAL_ADDR="${EMAIL_ADDR%@*}" REMOTE_DOMAIN="${EMAIL_ADDR#*@}" #REMOTE_MX=$(dig +short $REMOTE_DOMAIN MX |head -n1 |cut -d ' ' -f 2) REMOTE_MX="ns1.info-ufr.univ-montp2.fr" SMTP_PORT="25" SENDER="fabien.priotto@univ-montp2.fr" MESSAGE="This is a test from bash." INVALID_RECIPIENT="invalid@$REMOTE_DOMAIN" RELAY_TEST="test@example.com" DATE=$(date '+%a, %d %b %Y %H:%M:%S %z') # Check if an MX record was returned for the domain echo [ -z "$REMOTE_MX" ] && echo "Failed to get MX record from \"$REMOTE_DOMAIN\"" && exit 1 || echo "Got MX:\"$REMOTE_MX\" for DOMAIN:\"$REMOTE_DOMAIN\"" # Populate array with SMTP commands to run SMTP_commands=( \ "HELO $LOCAL_HOSTNAME" \ "MAIL FROM: <$SENDER>" \ "RCPT TO: <$EMAIL_ADDR>" \ "DATA" \ "To: <$EMAIL_ADDR>\r\nFrom: [SMTP TEST] <$SENDER>\r\nSubject: Test Message from webinfo.proj.\r\n$MESSAGE\r\n." \ "quit" ) # Define sending function email_smtp () { echo "Trying connect to MX:\"$REMOTE_MX\"" echo exec 3<>/dev/tcp/$REMOTE_MX/$SMTP_PORT read -u 3 reply echo "$reply" # Set internal field separator for "SMTP_commands" array looping IFS="" # Loop over "SMTP_commands" array for i in ${SMTP_commands[@]} do echo "----Sending Data:" echo "$i" echo -en "$i\r\n" >&3 read -u 3 reply echo "----Server Reply:" echo "$reply" done } #Call senderfunction email_smtp