fwaechter
fwaechter

Reputation: 905

Validate Emails with Bash

I try to validate an email with a shell script. Is there a easy example to validate a mail? Asked google but just found crap and PHP (also crap..).

Thanks and regards.

Upvotes: 1

Views: 14035

Answers (6)

Dev Sahoo
Dev Sahoo

Reputation: 12101

Here is an improved and working version of the script by codevour:

#!/bin/bash
# check for valid usage
if [ x$1 = 'x' ]
then
echo "Usage: $0 <email address>"
exit 1
fi
mailcmd=`mktemp`
# grabbing fields
user=`echo $1 | perl -p -e 's/^([^@]+)@([^\@]+)$/$1/g'`
host=`echo $1 | perl -p -e 's/^([^@]+)@([^\@]+)$/$2/g'`
mxhost=`host -t mx $host|perl -p -e 's/.* ([^ ]+)\.$/$1/g'|sort -R|tail -1`

# compose email commands
echo -ne "helo example.com\r\n" > $mailcmd
echo -ne "mail from: <[email protected]>\r\n" >> $mailcmd
echo -ne "rcpt to: <$1>\r\n" >> $mailcmd
echo -ne "quit\r\n" >> $mailcmd

# check for mail results
mailresult=`cat $mailcmd | nc $mxhost 25| grep ^550 | wc -c`

if [ $mailresult -eq 0 ]
then
echo $1 "is valid"
exit 0
else
echo $1 "is not valid"
exit 1
fi

# clean up
rm $mailcmd

Upvotes: 1

Arumuga Raja
Arumuga Raja

Reputation: 184

You can use like this,

  read emailId

    if echo "${emailId}" | grep '^[a-zA-Z0-9]*@[a-zA-Z0-9]*\.[a-zA-Z0-9]*$' >/dev/null; then
        echo Valid
    else
        echo Not Valid
    fi

Upvotes: 0

Kernel
Kernel

Reputation: 1

My any suggestion for the latter script, check work with multiple servers that accept checks without authentication, using nslookup who knows:

For example code in: http://www.vivaolinux.com.br/script/Simples-Verificador-de-Email-Gmail

see the code below in the site.

I hope I have contributed and I hope to collaborate as well.

Thank you.

Upvotes: 0

eldorado0o
eldorado0o

Reputation: 528

Validate script.

The meaning of this script, is to be sure from all emails that are valid or not before sending them email.

this script check a list of emails.

 #!/bin/bash
#:
#: e-mail.verify.sh
#:
#: Date: 2011/14/12 13:14 PM IST
#: Author: Louay _at_ [email protected]
#: Discription: Verify (or) Validate the Hotmail Adresses.
#:
#:


#: First we create a Expect script to be sourced for us.

if [ ! $# == 1 ]
then
        echo "Invalid Args $0 Filename"
        exit 0
fi


#: Verifying the Hotmail adressess.
#: First verify the network Connections

C_R="\e[01;31m"                         ## Colors
C_B="\e[01;30m"
C_G="\e[01;32m"
C_END="\e[00m"


SMTPSERV=`host -t mx hotmail.com |grep 5 | grep mx2.hotmail.com |cut -d " " -f 7| sed 's/\.$//'`
ping -c2 $SMTPSERV >/dev/null
               if [ "$?" -eq 0 ]
               then
                       echo -e "Internet Connection" "\t\t\t\t\t\t$C_G[ OK ]$C_END"
                       echo -e "$SMTPSERV is AVAILABLE."
                       echo -n "Verifing"
                       for (( i=0; i<5; i++ ))
                       do
                               echo -n ".."
                               sleep 1
                                               done
                       echo
               else
                       echo -e "Internet Connection:" "\t\t\t\t\t\t$C_R[ FAIL ]$C_END" ""
                       echo -e "$SMTPSERV is Unavialable."
                       echo -e "Check your Network settings."
                       exit 0
               fi





COUNT=0
RM_FILE="validemails.txt"

rm -f $RM_FILE

cat $1 | while read LINE; do
{
MAFR="MAIL FROM: <[email protected]>"
MATO="RCPT TO: <$LINE>"

#: ^variablies declared for not get escaped in the next cat command, where
#: we set the $MAFR in the expect script.

cat << __EOF > e-veri
#!/bin/expect
#:
#: Date: 2011/14/12 01:14 PM
#: Author: Louay Mshelim_at_ [email protected]
#: Discription: Expect Script to Verify/Validate the Hotmail Adresses.
#:


set VMAFR "$MAFR"
set VMATO "$MATO"
         spawn nc -C mx4.hotmail.com 25
                        expect "Sending"
                        send "HELO mx4.hotmail.com\r"
                        expect "OK"
                        send "\$VMAFR\r"
                        expect "OK"
                        send "\$VMATO\r"
                        expect "250"
                        send "quit\r"

expect eof
__EOF



#: Running the expect script and extracting the Results.txt

expect e-veri > Results.txt
grep 550 Results.txt >/dev/null

                if [ "$?" -eq 0 ]
                then
                        echo -e $LINE >> invalid.txt        #invalid E-mails
                else
                        echo -e "$LINE" >> validemails.txt
                fi
}
done
echo -e "Valid E-mail have been saved to $C_R[ validemails.txt ]$C_END"

#: END

Upvotes: 1

Leolo
Leolo

Reputation: 1337

If you explicitly state bash on the #! line, you can uses regexes:

#!/bin/bash

if [[ $email =~ '(.+)@(.+)' ]] ; then
   user=${BASH_REMATCH[1]}
   host=${BASH_REMATCH[2]}
fi

If you are serious about programing with bash, read the man page all the way through. Twice. Also read the Bash FAQ.

Upvotes: 1

Christopher Klewes
Christopher Klewes

Reputation: 11435

You mean something like this?

#!/bin/bash
# check for valid usage
if [ x$1 = 'x' ]
then
echo "Usage: $0 <email address>"
exit 1
fi

# grabbing fields
user=`echo $1 | cut -f1 -d\@`
host=`echo $1 | cut -f2 -d\@`
mxhost=`host -t mx $host | cut -f7 -d\ `
len=`echo $mxhost | wc -c`
len=`expr $len - 2`
mxhost=`echo $mxhost | cut -b1 -$len`

# compose email commands
echo -ne "helo test.com\r\n" > mailcmd
echo -ne "mail from: test\@test.com\r\n" >> mailcmd
echo -ne "rcpt to: $1\r\n" >> mailcmd
echo -ne "quit\r\n" >> mailcmd

# check for mail results
mailresult=`cat mailcmd | nc $mxhost 25| grep ^550 | wc -c`

if [ $mailresult -eq 0 ]
then
echo $1 "is valid"
exit 0
else
echo $1 "is not valid"
exit 1
fi

# clean up
rm mailcmd

Found at: Fun things in Life - Simple Bash Email Validator

Upvotes: 0

Related Questions