Kirim email dengan file terlampir menggunakan telnet atau netcat


15

Saya sering menggunakan telnet atau netcat untuk menghubungkan server smtp untuk mengirim email sebagai ujian.

Apakah ada yang tahu bagaimana Anda akan mengirim email menggunakan telnet atau netcat tetapi juga melampirkan file ? Mungkin ada cara yang lebih baik, tetapi saya masih ingin tahu :-)

Saya akan senang dengan solusi yang menggunakan shell bash kecil untuk mencapai tujuan, tetapi tidak ingin menggunakan alat lain ...


1
ehlo, ini mungkin termasuk membuat lampiran mime dalam file, menyandikannya dan kemudian menempelkannya ke jendela Anda. Meskipun bisa sangat berguna untuk hanya bisa telnet ke server SMTP, menulis surat pendek dan mengirimkannya (dan saya bisa), mengirim file seperti itu tidak terlalu praktis. Coba 'sendfile' atau 'mutt' (bahkan jika Anda tidak suka menggunakan alat).
Andrioid

Tepat setelah gema '.'; Anda mungkin ingin menambahkan gema ini '.'; tidur 3; gema 'berhenti';

Jawaban:


10

Oke, jadi menggunakan komentar semua orang sebagai titik awal saya membuat kekacauan konyol ini :-) ...

{ 
    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

Meskipun karena saya hanya mengirim data acak, tidak yakin apakah data tetap utuh ...
Kyle Brandt

Anda memiliki toleransi yang lebih tinggi terhadap kebosanan daripada saya! > tersenyum <
Evan Anderson

Bagaimana saya bisa mengubah ini untuk mengirim file teks tertentu?
user987654321

8

Ya Anda harus base64 menyandikan lampiran dan membuat header MIME.

Daripada menghasilkan pesan baru "on the fly" setiap kali, mungkin akan lebih mudah hanya mengirim email kepada diri sendiri pesan contoh yang sangat singkat dari program email "nyata" (meningkatkan pekerjaan yang dilakukan orang-orang yang menulisnya untuk meletakkan lampiran) ke dalam pengkodean yang tepat dan membuat header MIME).

Simpan pesan itu ke dalam file teks dengan tajuknya (tentu saja menghapus tajuk transpor), dan cukup modifikasi / salin / tempel ke telnet atau netcat untuk sesi selanjutnya.


6

Sementara pengujian tangan server SMTP dengan tangan dimungkinkan dan dapat dilakukan, menggunakan alat yang dirancang untuk ini akan jauh lebih mudah.

Artikel ini menjelaskan SWAKS . swaks dirancang untuk pengujian server smtp. Mendukung lampiran, otentikasi, dan enkripsi!


+1 Sekarang ini sesuatu yang akan saya mulai gunakan! :-)
Kyle Brandt

4

saya tersandung pada entri ini ketika saya sedang mencari sesuatu yang sama. dan dari awnsers di sini dan beberapa penelitian tambahan saya berhasil membuat skrip ini.

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

Satu hal yang mungkin ingin Anda tambahkan adalah otentikasi. saya tidak membutuhkannya jadi saya belum menambahkannya.

Saya pikir itu hanya membutuhkan perintah md5sum , netcat , file , awk dan base64 , id kira itu cukup standar di sebagian besar sistem.


Apakah mungkin menambahkan beberapa lampiran dengan mudah, ke solusi ini?
TryTryAgain

3

Inilah yang saya lakukan untuk mengirim email dengan bash. Saya menggunakannya untuk mengirimi saya file log dan alamat IP eksternal, silakan menggunakannya:

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

Semoga itu baik untukmu;)

psirac.


3

Telnet - kirim email dengan beberapa lampiran

cat attachment.zip | base64> zip.txt
cat attachment.pdf | base64> pdf.txt

# Content-Type: text / csv; name = "$ FILE" # untuk file CSV
# Content-Type: application / x-msdownload; name = "$ FILE" # untuk dieksekusi
# Content-Type: text / xml; name = "$ FILE" # untuk file xml atau coba aplikasi / xml

telnet smtp.server.dom 25

HALO
MAIL FROM: email@server.com
RCPT KE: email@server.com
DATA
Subjek: Uji email
Dari: email@server.com
Kepada: email@server.com
MIME-Versi: 1.0
Tipe-Konten: multipart / campuran; batas = "X - = - = - = - batas teks"

--X - = - = - = - batas teks
Jenis-Konten: teks / polos

Letakkan pesan Anda di sini ...

--X - = - = - = - batas teks
Jenis-Konten: aplikasi / zip; name = "file.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... salin / rekatkan zip.txt

--X - = - = - = - batas teks
Jenis-Konten: teks / pdf; name = "file.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename = "file.pdf"

UEsDBBQAAAAIAG1 + zEoQa .... copy / paste pdf.txt

--X - = - = - = - batas teks
.

BERHENTI

1
Selamat datang di serverfault. Orang-orang yang memposting jawaban seperti Anda sangat disambut di situs web ini! :) gratz
bgtvfr

1

Anda harus meninjau spesifikasi protokol SMTP. Ini bacaan yang sangat mengejutkan untuk spesifikasi teknis, dan akan membantu Anda memahami bagaimana proses email bekerja.

Secara khusus, sadari bahwa lampiran dikonversi menjadi tipe MIME dan disandikan dalam teks, sehingga setiap lampiran yang ingin Anda kirim melalui telnet harus dikonversi menjadi teks dan ditransmisikan melalui protokol telnet.


1

Jika semua yang Anda uji adalah 'lakukan pengiriman lampiran', Anda mungkin dapat menggunakan standar lampiran pra-MIME: uuencode. Tidak seperti MIME, jauh lebih mudah untuk membuat pesan. Tidak seperti MIME, tidak perlu header. Namun, tidak semua klien email mengenali file yang uuencoded sebagai lampiran lagi jadi saya sarankan pengujian untuk melihat apakah Anda dapat menggunakannya. Jika ya, Anda baru saja menghemat banyak usaha. Jika tidak, maka pra-membangun pesan MIMEed Anda melalui perl atau sesuatu dan menyalurkannya melalui sesuatu seperti NetCat mungkin adalah cara yang harus dilakukan.

Layak dilihat.


20 tahun yang lalu ini adalah jawaban yang bagus. Tidak sekarang. Gunakan salah satu dari banyak perpustakaan MIME dan buat email yang sesuai dengan MIME, lengkap dengan pengkodean Base64.
james.garriss

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.