使用Bash验证电子邮件

使用Bash验证电子邮件,bash,email,validation,Bash,Email,Validation,我尝试用shell脚本验证电子邮件。有没有验证邮件的简单示例?问谷歌,但刚刚发现垃圾和PHP也垃圾 谢谢和问候。你是说这样的事吗 #!/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\@`

我尝试用shell脚本验证电子邮件。有没有验证邮件的简单示例?问谷歌,但刚刚发现垃圾和PHP也垃圾


谢谢和问候。

你是说这样的事吗

#!/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
网址:
你的意思是这样的

#!/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
网址:

如果您在!行中,可以使用正则表达式:

#!/bin/bash

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

如果您对使用bash编程是认真的,请通读手册页。两次如果您在上显式声明bash,请阅读。

!行中,可以使用正则表达式:

#!/bin/bash

if [[ $email =~ '(.+)@(.+)' ]] ; then
   user=${BASH_REMATCH[1]}
   host=${BASH_REMATCH[2]}
fi
如果您对使用bash编程是认真的,请通读手册页。两次同时阅读。

验证脚本

此脚本的含义是,在发送电子邮件之前,确保所有电子邮件都有效或无效

此脚本检查电子邮件列表

 #!/bin/bash
#:
#: e-mail.verify.sh
#:
#: Date: 2011/14/12 13:14 PM IST
#: Author: Louay _at_ louie.msh@gmail.com
#: 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: <louie.msh@gmail.COM>"
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_ louie.msh@gmail.com
#: 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
验证脚本

此脚本的含义是,在发送电子邮件之前,确保所有电子邮件都有效或无效

此脚本检查电子邮件列表

 #!/bin/bash
#:
#: e-mail.verify.sh
#:
#: Date: 2011/14/12 13:14 PM IST
#: Author: Louay _at_ louie.msh@gmail.com
#: 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: <louie.msh@gmail.COM>"
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_ louie.msh@gmail.com
#: 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

对于后一个脚本,我的建议是,使用nslookup(谁知道呢),使用多个接受检查而不进行身份验证的服务器进行检查:

例如,以下代码:

请参阅网站中的以下代码

我希望我已经做出了贡献,我也希望合作


谢谢。

如果您对后一个脚本有任何建议,请使用nslookup检查多台服务器的工作,这些服务器接受检查而不进行身份验证,谁知道呢:

例如,以下代码:

请参阅网站中的以下代码

我希望我已经做出了贡献,我也希望合作

谢谢。

您可以这样使用

  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
你可以这样用

  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

以下是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: <tester@example.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

以下是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: <tester@example.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

验证电子邮件是什么意思?只想通过另一个脚本验证一些输入。大多数情况下,都会出现以下情况:user@example.com但有时用户没有任何东西就来了@。。。想对它们进行排序吗?你说的验证电子邮件是什么意思?只想通过另一个脚本验证一些输入。大多数情况下,都会出现以下情况:user@example.com但有时用户没有任何东西就来了@。。。要对它们进行排序,这可能是一个重复,但不能代替在直升机起飞后正确地说SMTP,以及处理多行响应等。。仅仅因为某个东西在web上的某个地方并不意味着它是有用的。而且,它是用与Bourne shell兼容的样式编写的,没有利用任何Bash功能。谷歌也发现了这个脚本。这不是完美的解决方案。自动取款机我用的是echo$mail | cut-d'@。。。。虽然有效,但并不完美。感谢您的回复。这并不能代替在直升机起飞后正确地说SMTP,以及处理多行回复等。。仅仅因为某个东西在web上的某个地方并不意味着它是有用的。而且,它是用与Bourne shell兼容的样式编写的,没有利用任何Bash功能。谷歌也发现了这个脚本。这不是完美的解决方案。自动取款机我用的是echo$mail | cut-d'@。。。。虽然有效,但并不完美。谢谢你的回复。