Проверить электронную почту с Bash - PullRequest
1 голос
/ 06 октября 2009

Я пытаюсь проверить электронную почту с помощью сценария оболочки. Есть ли простой пример для проверки почты? Спросил Google, но только что нашел дерьмо и PHP (также дерьмо ..).

Спасибо и всего наилучшего.

Ответы [ 6 ]

2 голосов
/ 21 декабря 2010

Если вы явно указали bash на #! строка, вы можете использовать регулярные выражения:

#!/bin/bash

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

Если вы серьезно относитесь к программированию на bash, прочитайте man-страницу до конца. Дважды. Также прочитайте Bash FAQ .

1 голос
/ 04 июля 2018

Вот улучшенная и рабочая версия скрипта от 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
1 голос
/ 08 января 2012

Проверить скрипт.

Смысл этого скрипта, быть уверенным во всех электронных письмах, которые действительны или нет, прежде чем отправлять им электронные письма.

этот скрипт проверяет список писем.

 #!/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
0 голосов
/ 29 декабря 2016

Вы можете использовать как это,

  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
0 голосов
/ 11 апреля 2013

Мое любое предложение для последнего сценария, проверьте работу с несколькими серверами, которые принимают проверки без аутентификации, используя nslookup, который знает:

Например, код в: http://www.vivaolinux.com.br/script/Simples-Verificador-de-Email-Gmail

см. Код ниже на сайте.

Я надеюсь, что внес свой вклад и надеюсь также сотрудничать.

Спасибо.

0 голосов
/ 06 октября 2009

Ты имеешь в виду что-то подобное?

#!/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

Найдено по адресу: Забавные вещи в жизни - Simple Bash Email Validator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...