Telnet veya netcat kullanarak ekteki dosyayı içeren bir e-posta gönderin


15

Test olarak e-posta göndermek için smtp sunucularını bağlamak için genellikle telnet veya netcat kullanıyorum.

Telnet veya netcat kullanarak nasıl e-posta göndereceğinizi ancak dosya da ekleyeceğinizi bilen var mı ? Muhtemelen daha iyi yollar var, ama hala bilmek istiyorum :-)

Hedefe ulaşmak için küçük bir bash kabuğu kullanan bir çözümden memnun olurum, ancak başka bir araç kullanmak istemiyorum ...


1
ehlo, bu muhtemelen bir dosyada mime eki oluşturmayı, kodlamayı ve ardından pencerenize yapıştırmayı içerir. Sadece bir SMTP sunucusuna telnet yapabilmek, kısa bir posta yazmak ve göndermek (ve yapabilmek) için çok yararlı olsa da, böyle bir dosya göndermek çok pratik değildir. 'Sendfile' veya 'mutt' komutunu deneyin (araç kullanmak istemeseniz bile).
Andrioid

Yankıdan hemen sonra . '; bu yankıyı 'eklemek isteyebilirsiniz.'; uyku 3; echo 'quit';

Yanıtlar:


10

Tamam, bu yüzden herkesin yorumlarını başlangıç ​​noktası olarak kullanarak bu saçma sapan karışıklıkla ortaya çıktım :-) ...

{ 
    sleep 5; 
    echo 'ehlo';
    sleep 3;
    echo 'MAIL FROM:<Test@test.com>';
    sleep 3; 
    echo 'RCPT TO: <kyle@test_dest.com>';
    sleep 3;
    echo 'DATA';
    sleep 3;
    echo -e 'To:kyle@testdest.com\nMIME-Version: 1.0 (mime-construct 1.9)\nContent-Type: application/zip\nContent-Transfer-Encoding: base64\n\n';
    dd if=/dev/urandom bs=4 count=10 2>/dev/null | openssl base64;
    echo '.';
} | telnet mx1.testdest.com 25

Ben sadece rastgele veri gönderiyorum beri, verilerin bozulmadan kaldığından emin değilim ...
Kyle Brandt

Tedium için benden daha yüksek bir toleransınız var! > gülümseme <
Evan Anderson

Belirli bir metin dosyasını göndermek için bunu nasıl değiştirebilirim?
user987654321

8

Ick. Base64 eki kodlamak ve MIME üstbilgileri oluşturmak zorunda kalacaksınız.

Her seferinde "anında" yeni bir mesaj oluşturmak yerine, kendinize "gerçek" bir e-posta programından çok kısa bir örnek mesaj göndermeniz daha kolay olacaktır (onu yazan kişilerin eki koymak için yaptıkları işi kullanarak) uygun kodlama ve MIME başlıklarını oluşturma).

Bu mesajı başlıklarıyla birlikte bir metin dosyasına kaydedin (elbette aktarım başlığını kaldırarak) ve gelecekteki oturumlar için sadece telnet veya netcat'e değiştirin / kopyalayın / yapıştırın.


6

SMTP sunucularını elle elle test etmek mümkün ve uygulanabilir olsa da, bunun için tasarlanmış bir araç kullanmak çok daha kolay olacaktır.

Bu makalede SWAKS açıklanmaktadır . swaks smtp sunucu testi için tasarlanmıştır. Ekleri, kimlik doğrulamasını ve şifrelemeyi destekler!


+1 Şimdi kullanmaya başlayacağım bir şey! :-)
Kyle Brandt

4

Ben aynı bir şey ararken ben bu giriş üzerine yuvarlandı. ve burada filizler ve som bir ek araştırma ben bu senaryo yapmak başardı.

#!/bin/sh

# Default reception
TOEMAIL="myEmail@domain.ltd";
# Default Subject
SUBJECT="You got mail - $DATE";
# Default Contents
MSGBODY="Hello, this is the default message body";
# Default Attachment
#ATTACHMENT="/tmp/testoutput"
# Default smtp server
mailserver="smtp.server.ltd"
mailserverPort="25"

showUsage() {
        echo "$0 -a /file/to/attach [-m /message/file] [-M \"Message string\"] -s \"subject\" -r receiver@domain.com"
        echo
        echo "The attachment (-a) is required, if no attachment is used then rather use sendmail directly."
}

fappend() {
    echo "$2">>$1;
}
DATE=`date`

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# This might need correction to work on more places, this is tested at a ubuntu 13.10 machine.  #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
domain=`grep search /etc/resolv.conf | awk '{print $2;}'`
computer=`hostname`
user=`whoami`
FREMAIL="$user@$computer.$domain"

while getopts "M:m:a:s:r:" opt; do
  case $opt in
        s)
          SUBJECT="$OPTARG - $DATE"
          ;;
        r)
          TOEMAIL="$OPTARG"
          ;;
        m)
          MSGBODY=`cat $OPTARG`
          ;;
        M)
          MSGBODY="$OPTARG"
          ;;
        a)
          ATTACHMENT="$OPTARG"
          ;;
        :)
          showUsage
          ;;
        \?)
          showUsage
          ;;
  esac
done

if [ "$ATTACHMENT" = "" ]; then
        showUsage
        exit 1
fi

MIMETYPE=`file --mime-type -b $ATTACHMENT`
TMP="/tmp/tmpmail_"`date +%N`;
BOUNDARY=`date +%s|md5sum|awk '{print $1;}'`
FILENAME=`basename $ATTACHMENT`

DATA=`cat $ATTACHMENT|base64`

rm $TMP 2> /dev/null

fappend $TMP "EHLO $computer.$domain"
fappend $TMP "MAIL FROM:<$FREMAIL>"
fappend $TMP "RCPT TO:<$TOEMAIL>"
fappend $TMP "DATA"
fappend $TMP "From: $FREMAIL"
fappend $TMP "To: $TOEMAIL"
fappend $TMP "Reply-To: $FREMAIL"
fappend $TMP "Subject: $SUBJECT"
fappend $TMP "Content-Type: multipart/mixed; boundary=\"$BOUNDARY\""
fappend $TMP ""
fappend $TMP "This is a MIME formatted message.  If you see this text it means that your"
fappend $TMP "email software does not support MIME formatted messages."
fappend $TMP ""
fappend $TMP "--$BOUNDARY"
fappend $TMP "Content-Type: text/plain; charset=UTF-8; format=flowed"
fappend $TMP "Content-Disposition: inline"
fappend $TMP ""
fappend $TMP "$MSGBODY"
fappend $TMP ""
fappend $TMP ""
fappend $TMP "--$BOUNDARY"
fappend $TMP "Content-Type: $MIMETYPE; name=\"$FILENAME\""
fappend $TMP "Content-Transfer-Encoding: base64"
fappend $TMP "Content-Disposition: attachment; filename=\"$FILENAME\";"
fappend $TMP ""
fappend $TMP "$DATA"
fappend $TMP ""
fappend $TMP ""
fappend $TMP "--$BOUNDARY--"
fappend $TMP ""
fappend $TMP "."
fappend $TMP "quit"

netcat $mailserver $mailserverPort < $TMP >> $TMP
rc="$?"
if [ "$rc" -ne "0" ]; then
    echo "Returncode: $rc"
    echo "Please inspect $TMP"
else
    rm $TMP;
fi

Eklemek isteyebileceğiniz bir şey kimlik doğrulamadır. i gerek yok bu yüzden ekledi sığınak.

Ben sadece md5sum , netcat , dosya , awk ve base64 komutları gerektirir düşünüyorum , id sanırım çoğu sistemde oldukça standarttır.


Bu çözüme kolayca birden fazla ek eklemek mümkün müdür?
TryTryAgain

3

Ben bash ile e-posta göndermek için yapıyorum budur. Bana bir günlük dosyası ve harici IP adresi göndermek için kullanıyorum, kullanmaktan çekinmeyin:

#!/bin/bash
# Send email from bash with attachment
# by Psirac - www.subk.org
from=myfromadress@test.com
to=mytoadress@test.com
mailserver=smtp.test.com
mylogin=`echo 'MYUSERNAME' | openssl base64`
mypassword=`echo 'MYPASSWORD' | openssl base64`
myip=`wget -qO- icanhazip.com`
myfile=`cat /tmp/mytest.log | openssl base64`
mydate=`date`

exec 9<>/dev/tcp/$mailserver/25
echo "HELO routeur.tripfiller" >&9
read -r temp <&9
#echo "$temp"
echo "auth login" >&9
read -r temp <&9
#echo "$temp"
echo "$mylogin=" >&9
read -r temp <&9
#echo "$temp"
echo "$mypasswd=" >&9
read -r temp <&9
#echo "$temp"
echo "Mail From: $from" >&9
read -r temp <&9
#echo "$temp"
echo "Rcpt To: $to" >&9
read -r temp <&9
#echo "$temp"
echo "Data" >&9
read -r temp <&9
#echo "$temp"
echo "To:$to" >&9
echo "MIME-Version: 1.0" >&9
echo "Subject: Test mail sended at $mydate" >&9
echo "From: $from" >&9
echo "To: $to" >&9
echo "Content-Type: multipart/mixed; boundary=sep" >&9
echo "--sep" >&9
echo "Content-Type: text/plain; charset=UTF-8" >&9
echo "Here your text..." >&9
echo "External IP adress: $myip" >&9
echo "--sep" >&9
echo "Content--Type: text/x-log; name=\"mytest.log\"" >&9
echo "Content-Disposition: attachment; filename=\"mytest.log\"" >&9
echo "Content-Transfer-Encoding: base64" >&9
echo "" >&9
echo "$myfile" >&9
echo "--sep--" >&9
echo "." >&9
read -r temp <&9
echo "$temp"
echo "quit" >&9
read -r temp <&9
echo "$temp"
9>&-
9<&-
#echo "All Done. See above for errors"
exit 0

Umarım sizin için iyi olmuştur;)

psirac.


3

Telnet - birden fazla ek içeren e-posta gönder

kedi eki.zip | base64> zip.txt
kedi eki.pdf | base64> pdf.txt

# İçerik Türü: metin / csv; CSV dosyaları için name = "$ FILE" #
# İçerik Türü: uygulama / x-msdownload; yürütülebilir dosya için name = "$ FILE" #
# İçerik Türü: metin / xml; xml dosyaları için name = "$ FILE" # veya application / xml'yi deneyin

telnet smtp.server.dom 25

HELO
POSTA: email@server.com
RCPT TO: email@server.com
VERİ
Konu: Test e-postası
Gönderen: email@server.com
Alıcı: email@server.com
MIME Sürümü: 1.0
İçerik Türü: çok parçalı / karışık; sınır = "X - = - = - = - metin sınırı"

--X - = - = - = - metin sınırı
İçerik Türü: metin / düz

Mesajınızı buraya yazın ...

--X - = - = - = - metin sınırı
İçerik Türü: uygulama / zip; name = "file.zip"
İçerik Aktarımı Kodlaması: base64
İçerik-Elden Çıkarma: ek; filename = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... zip.txt dosyasını kopyala / yapıştır

--X - = - = - = - metin sınırı
İçerik Türü: metin / pdf; name = "dosya.pdf"
İçerik Aktarımı Kodlaması: base64
İçerik-Elden Çıkarma: ek; filename = "dosya.pdf"

UEsDBBQAAAAIAG1 + zEoQa .... pdf.txt dosyasını kopyala / yapıştır

--X - = - = - = - metin sınırı
.

QUIT

1
Sunucu hatasına hoş geldiniz. Sizinkine benzer yanıtlar gönderen kullanıcılar bu web sitesine hoş geldiniz! :) gratz
bgtvfr

1

SMTP protokolü özelliklerini gözden geçirmeniz gerekir. Teknik bir özellik için şaşırtıcı derecede hafif bir okuma ve e-posta işleminin nasıl çalıştığını anlamanıza yardımcı olacaktır.

Özellikle, eklerin MIME türlerine dönüştürüldüğünü ve metin olarak kodlandığını, bu nedenle telnet yoluyla göndermek istediğiniz tüm eklerin metne dönüştürülüp telnet protokolü yoluyla iletilmesi gerektiğini unutmayın.


1

Test ettiğiniz tek şey "ek teslim edildi mi" ise, MIME öncesi eklerin standardını kullanmaktan kurtulabilirsiniz: uuencode. MIME'den farklı olarak, mesaj oluşturmak çok daha kolaydır. MIME'den farklı olarak herhangi bir başlık gerektirmez. Ancak, tüm posta istemcileri artık uuencoded dosyalarını ek olarak tanımazlar, bu yüzden kullanıp kullanamayacağınızı görmek için test yapmanızı öneririm. Eğer öyleyse, çok fazla çaba harcadınız. Değilse, o zaman MIMEed mesajınızı perl ya da bir şey yoluyla önceden oluşturmak ve NetCat gibi bir şeyle pipetlemek muhtemelen yoludur.

Bakmaya değer.


20 yıl önce bu iyi bir cevaptı. Şimdi değil. Birçok MIME kitaplığından birini kullanın ve Base64 kodlamasıyla birlikte MIME uyumlu bir e-posta oluşturun.
james.garriss

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.