2013-01-14 42 views
5

我試圖找出一個電子郵件地址是否有效。bash和telnet來測試一個電子郵件

我已經usign的telnet實現這一點,見下文

$ telnet mail.example.com 25 
Trying 0.0.0.0... 
Connected to mail.example.com. 
Escape character is '^]'. 
220 mail.example.com Mon, 14 Jan 2013 19:01:44 +0000 
helo email.com 
250 mail.example.com Hello email.com [0.0.0.0] 
mail from:[email protected] 
250 OK 
rcpt to:[email protected] 
550 Unknown user 

這個550請求我知道的地址不是在郵件服務器上有效的...如果它是有效的,我會得到迴應如下所示:

250 2.1.5 OK 

我該如何在shell腳本中自動執行此操作?到目前爲止我有以下

#!/bin/bash 
host=`dig mx +short $1 | cut -d ' ' -f2 | head -1` 
telnet $host 25 

謝謝!

+3

值得注意的是,大多數大型郵件提供商,包括GMail,Hotmail和Yahoo Mail都不允許使用這種技術來阻止垃圾郵件發送者收集真實賬戶。 –

+1

@那個其他人 我實際上已經嘗試過使用gmail,它*做*工作,只是以不同的格式...... 'code'郵件來自:<[email protected]> rcpt to: [email protected]>'code' – bsmoo

回答

8

試着這樣做:

[[ [email protected] ]] || { 
    printf "Usage\n\t./$0 domain <email> <from_email> <rcpt_email>\n" 
    exit 1 
} 
{ 
    sleep 1 
    echo "helo $2" 
    sleep 0.5 
    echo "mail from:$3" 
    sleep 0.5 
    echo "rcpt to:$4" 
    echo 
} | telnet $1 25 | 
    grep -q "Unknown user" && 
    echo "Invalid email" || 
    echo "Valid email" 

用法:

./script.sh domain email from_email rcpt_email 
1

你總是可以行後輸入你的命令到一個純文本文件,行,就好像您鍵入他們在命令行上。然後,你可以使用像

cat commands.txt | telnet mail.example.com 25 | grep -i '550 Unknown User' 

既然你可能就需要考慮這個文本文件作爲模板,(我假設你可能會想參數化的e-mail地址),您可能需要插入一個呼叫awk接受'cat commands.txt'的輸出並插入你的電子郵件地址。