2009-10-06 3 views
0

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

Спасибо и приветствую.

+2

Что вы имеете в виду «проверить электронную почту»? – mouviciel

+0

просто хочу проверить некоторые данные с помощью другого скрипта. Наиболее это приходит что-то вроде: «[email protected]» , но иногда просто пришел «пользователь» без ничего @ ... хочу, чтобы отсортировать их – fwaechter

+1

Возможная дубликата [Проверка электронной почты с регулярным выражением bash script] (http://stackoverflow.com/questions/2138701/email-check-regular-expression-with-bash-script) –

ответ

0

Вы имеете в виду что-то вроде этого?

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

Найдено в: Fun things in Life - Simple Bash Email Validator

+0

Это не замена должным образом SMTP (ожидание после HELO и работа с несколькими ответы и т. д.). Просто потому, что что-то в Интернете где-то не означает, что это полезно. – ShiDoiSi

+0

Кроме того, он написан в стиле, совместимом с оболочкой Bourne и не использует никаких возможностей Bash. –

+0

Нашел этот скрипт и Google. Не идеальное решение. Atm я использую что-то вроде echo $ mail | cut -d '@' .... работает, но не идеально. Спасибо за ваши ответы. – fwaechter

1

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

#!/bin/bash 

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

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

1

Проверка подлинности.

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

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

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

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

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

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

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

Спасибо.

0

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

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 
Смежные вопросы