2016-03-13 23 views
5

bir kabuk komut dosyası ile bir günlüğüne telnet bir SMTP oturumu kaydetmek .. DoğrudanBen HELO tarafından bir e-postayı test için bir komut dosyası oluşturma

telnet konsolunda, komutlar ince çalışır, ancak bir komut, yapabilirim Çıkışı almayın. Bir komut olarak

[email protected] [~]# telnet alt1.aspmx.l.google.com 25 
Trying 2a00:1450:4010:c09::1a... 
Connected to alt1.aspmx.l.google.com. 
Escape character is '^]'. 
220 mx.google.com ESMTP qm6si6508388lbb.110 - gsmtp 
HELO verify-email.org 
250 mx.google.com at your service 
MAIL FROM: <[email protected]> 
250 2.1.0 OK qm6si6508388lbb.110 - gsmtp 
RCPT TO: <[email protected]> 
550-5.1.1 The email account that you tried to reach does not exist. Please try 
550-5.1.1 double-checking the recipient's email address for typos or 
550-5.1.1 unnecessary spaces. Learn more at 
550 5.1.1 https://support.google.com/mail/answer/6596 qm6si6508388lbb.110 - gsmtp 
quit 
221 2.0.0 closing connection qm6si6508388lbb.110 - gsmtp 
Connection closed by foreign host. 

: Bash olarak

: içinde

$ telnet alt1.aspmx.l.google.com 25 
HELO verify-email.org 
MAIL FROM: <[email protected]> 
RCPT TO: <[email protected]> 
quit 

sonuç

cat << EOF | telnet alt1.aspmx.l.google.com 25 
HELO verify-email.org 
MAIL FROM: <[email protected]> 
RCPT TO: <[email protected]> 
quit 
EOF 

VEYA

{ echo "HELO verify-email.org"; sleep 1; echo "MAIL FROM: <[email protected]>"; sleep 1; echo "RCPT TO: <[email protected]>" ; sleep 1 ; echo quit } | telnet alt1.aspmx.l.google.com 25 

VEYA

#!/usr/bin/expect -f 

spawn alt1.aspmx.l.google.com 25 
send '"HELO verify-email.org\r"' 
send '"MAIL FROM: <[email protected]>\r"' 
send '"RCPT TO: <[email protected]>\r"' 
send '"quit\r"' 

VEYA

sh aa 1> aa.txt 2>&1 

VEYA

sh aa &> aa.txt 

sonuç getirmez.

+1

'550-5.1.1 sen exist.' vermez ulaşmaya çalıştı e-posta hesabı reasonble tepki gibi görünüyor. '@ Gmail.com' testinin geçerli bir kimlik olduğunu kesin olarak biliyor musunuz? Güzel Q ve iyi araştırılmış/belgelenmiş. Göndermeye devam et! İyi şanslar. – shellter

+0

Katılıyorum, bu harika bir ilk soru. :) Özellikle tüm İnternet'i okuduğunuzdan çok etkilendim. Yıllardır bunun üzerinde çalışıyorum ve bunun üstesinden gelemiyorum. – ghoti

+0

Gerçekten çok iyi araştırılmış, ama "güzel Q" ile ilgili heyecanımı tutacağım, formülasyonlar kelimenin tam anlamıyla küfürlüdür: ^) Neyse ki, bu düzeltmek çok zor değil. –

cevap

3

Genel olarak, muhtemelen Telnet içine boru şeyler istemiyoruz. Makul bir alternatif netcat'dur (çoğu sistemde nc). sözü

, ben TCP soket bağlantılarını yapmak için bash iç desteğine güvenerek bir süre önce a tiny bash HTTP client yazdı. Bir SMTP istemcisi biraz daha karmaşık, ancak yine de oldukça kolaydır. SMTP güzeldir. Bir sürü komut yükleyebilir, ardından birden fazla yanıt satırını tek seferde okuyabilirsiniz.

#!/usr/bin/env bash 

target="$1" 
address="$2" 

success="" 

# Open a two-way socket connection on fd/3 
exec 3<>/dev/tcp/$target/25 

# Stand back, we're doing SMTP! 
printf "HELO $HOSTNAME\r\n" >&3 
printf "MAIL FROM: <[email protected]$HOSTNAME>\r\n" >&3 
printf "RCPT TO: <$address>\r\n" >&3 
printf "QUIT\r\n" >&3 

# Now that we've had our say, it's time to listen. 
while read -u 3 code message; do 
    echo ">> <$code> ${message%$'\r'}" # Debugging output 
    case "$code" in 
    2??) success="${success:-true}" ;; # Only set variable if it's not already set 
    5??) success=false ;;    # (i.e. false overrides all other responses) 
    esac 
done 

# Close connections, clean up after ourselves 
exec 3<&-; exec 3>&- 

if [ -z "$success" ]; then 
     echo "NOTICE: Not sure we reached an SMTP server..." 
     exit 1 
elif $success; then 
     echo "NOTICE: All's well, $target accepts mail for $address" 
else 
     echo "NOTICE: I detected a failure." 
     exit 1 
fi 

Not bir eşittir CR çizgisinden son karakteri şeritler Parametre Genişleme ${message%$'\r'} arasında. Bu, SMTP yanıtları \r\n satırsonu olarak kullanıldığından yapılır; komut dosyanız muhtemelen \r satırının (veya $ message değişkeninin) yalnızca bir parçası olarak kabul edilir.

+0

Mükemmel teşekkürler, bana çok yardımcı oldu. –

+0

@RodrigoHA FYI, yanıtı [kabul etmeyi] isteyebilirsiniz (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –