2009-10-06 9 views
0

J'essaye de valider un email avec un script shell. Existe-t-il un exemple simple pour valider un mail? Demandé google mais juste trouvé la merde et PHP (aussi merde ..).Valider les emails avec Bash

Merci et salutations.

+2

Que voulez-vous dire par « valider un e-mail »? – mouviciel

+0

je veux juste valider une entrée par un autre script. plus cela, il vient quelque chose comme: « [email protected] » mais parfois juste venu « utilisateur » sans rien @ ... veulent faire le tri – fwaechter

+1

double possible de [Email check expression régulière avec bash script] (http://stackoverflow.com/questions/2138701/email-check-regular-expression-with-bash-script) –

Répondre

0

Vous voulez dire quelque chose comme ça?

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

à l'adresse: Fun things in Life - Simple Bash Email Validator

+0

Ceci n'est pas un substitut pour parler SMTP correctement (attente après le HELO, et traitant multi réponses en ligne, etc.). Juste parce que quelque chose est sur le web quelque part ne veut pas dire que c'est utile. – ShiDoiSi

+0

En outre, il est écrit dans un style compatible avec le shell Bourne et ne tire pas parti des fonctionnalités Bash. –

+0

Trouvé aussi ce script par google. Ce n'est pas la solution parfaite. Atm j'utilise quelque chose comme echo $ mail | couper -d '@' .... fonctionne mais n'est pas parfait. Merci pour vos réponses. – fwaechter

1

Si vous déclarez explicitement bash sur le #! ligne, vous pouvez utilise les expressions rationnelles:

#!/bin/bash 

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

Si vous êtes sérieux au sujet de la programmation avec bash, lisez la page de l'homme tout au long. Deux fois. Lisez également le Bash FAQ.

1

Valider le script.

La signification de ce script, est d'être sûr de tous les emails qui sont valides ou non avant de leur envoyer un email.

ce script vérifie une liste d'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 
0

Ma toute suggestion pour ce dernier scénario, vérifier le travail avec plusieurs serveurs qui acceptent les chèques sans authentification, en utilisant nslookup qui sait:

Pour exemple de code dans: http://www.vivaolinux.com.br/script/Simples-Verificador-de-Email-Gmail

voir le code ci-dessous dans le site.

J'espère avoir contribué et j'espère collaborer aussi.

Merci.

0

Vous pouvez utiliser comme ça,

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 
Questions connexes