Senden Sie eine E-Mail mit einer angehängten Datei über Telnet oder Netcat


15

Ich benutze oft Telnet oder Netcat, um SMTP-Server zu verbinden und als Test eine E-Mail zu senden.

Weiß jemand, wie Sie eine E-Mail über Telnet oder Netcat senden, aber auch eine Datei anhängen ? Es gibt wahrscheinlich bessere Möglichkeiten, aber ich möchte es trotzdem wissen :-)

Ich würde mich über eine Lösung freuen, die eine kleine Bash-Shell verwendet, um das Ziel zu erreichen, aber keine anderen Tools verwenden möchte ...


1
ehlo, dazu gehört wahrscheinlich, dass Sie einen MIME-Anhang in einer Datei erstellen, ihn kodieren und dann in Ihr Fenster einfügen. Während es sehr nützlich sein kann, nur ein Telnet an einen SMTP-Server zu senden, eine kurze Mail zu schreiben und sie zu senden (und ich kann es), ist das Senden einer solchen Datei einfach nicht sehr praktisch. Versuchen Sie 'sendfile' oder 'mutt' (auch wenn Sie keine Tools verwenden möchten).
Andrioid

Gleich nach dem Echo '.'; Vielleicht möchten Sie dieses Echo '.' hinzufügen; schlaf 3; echo 'quit';

Antworten:


10

Okay, als Ausgangspunkt für die Kommentare aller habe ich mir dieses dumme Durcheinander ausgedacht :-) ...

{ 
    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

Obwohl, da ich nur zufällige Daten sende, nicht sicher, ob die Daten intakt bleiben ...
Kyle Brandt

Sie haben eine höhere Toleranz für Langeweile als ich! > smile <
Evan Anderson

Wie kann ich dies ändern, um eine bestimmte Textdatei zu senden?
User987654321

8

Ick. Sie müssen den Anhang mit base64 codieren und die MIME-Header erstellen.

Anstatt jedes Mal eine neue Nachricht "on the fly" zu generieren, ist es wahrscheinlich einfacher, sich selbst eine kurze Beispielnachricht aus einem "echten" E-Mail-Programm per E-Mail zu senden (indem Sie die Arbeit der Autoren nutzen, um den Anhang zu erstellen) in die richtige Kodierung und Erstellung der MIME-Header).

Speichern Sie diese Nachricht in einer Textdatei mit Kopfzeilen (natürlich ohne die Transportkopfzeile) und ändern Sie sie für zukünftige Sitzungen, kopieren Sie sie und fügen Sie sie in Telnet oder Netcat ein.


6

Während das manuelle Testen von SMTP-Servern von Hand möglich und praktikabel ist, wird die Verwendung eines dafür entwickelten Tools viel einfacher.

Dieser Artikel erklärt SWAKS . swaks wurde für das Testen von SMTP-Servern entwickelt. Unterstützt Anhänge, Authentifizierung und Verschlüsselung!


+1 Das ist etwas, was ich jetzt benutzen werde! :-)
Kyle Brandt

4

Ich bin auf diesen Eintrag gestoßen, als ich nach etwas Ähnlichem suchte. und von den Markisen hier und einigen zusätzlichen Nachforschungen habe ich es geschafft, dieses Skript zu erstellen.

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

Eine Sache, die Sie vielleicht hinzufügen möchten, ist die Authentifizierung. Ich brauche es nicht, also habe ich es nicht hinzugefügt.

Ich denke, es erfordert nur md5sum , netcat , file , awk und die base64- Befehle, ich glaube, sie sind in den meisten Systemen ziemlich Standard.


Wäre es möglich, dieser Lösung problemlos mehrere Anhänge hinzuzufügen?
TryTryAgain

3

Dies ist, was ich tue, um E-Mails mit Bash zu senden. Ich benutze es, um mir eine Protokolldatei und eine externe IP-Adresse zu senden.

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

Hoffe es war gut für dich;)

psirac.


3

Telnet - E-Mail mit mehreren Anhängen senden

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

# Inhaltstyp: text / csv; name = "$ FILE" # für CSV-Dateien
# Inhaltstyp: application / x-msdownload; name = "$ FILE" # für die ausführbare Datei
# Inhaltstyp: text / xml; name = "$ FILE" # für XML-Dateien oder versuchen Sie application / xml

telnet smtp.server.dom 25

HELO
MAIL FROM: email@server.com
RCPT TO: email@server.com
DATEN
Betreff: E-Mail testen
Von: email@server.com
An: email@server.com
MIME-Version: 1.0
Inhaltstyp: mehrteilig / gemischt; border = "X - = - = - = - Textgrenze"

--X - = - = - = - Textgrenze
Inhaltstyp: Text / Plain

Geben Sie hier Ihre Nachricht ein ...

--X - = - = - = - Textgrenze
Content-Type: Anwendung / Zip; name = "file.zip"
Content-Transfer-Encoding: base64
Inhaltsdisposition: Anhang; filename = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... zip.txt kopieren / einfügen

--X - = - = - = - Textgrenze
Inhaltstyp: Text / PDF; name = "file.pdf"
Content-Transfer-Encoding: base64
Inhaltsdisposition: Anhang; filename = "file.pdf"

UEsDBBQAAAAIAG1 + zEoQa .... Kopieren / Einfügen von pdf.txt

--X - = - = - = - Textgrenze
.

VERLASSEN

1
Willkommen bei ServerFault. Leute, die Antworten wie Ihre posten, sind auf dieser Website herzlich willkommen! :) gratz
bgtvfr

1

Sie müssen die SMTP-Protokollspezifikation überprüfen. Es ist eine überraschend leichte Lektüre für eine technische Spezifikation und hilft Ihnen zu verstehen, wie der E-Mail-Prozess funktioniert.

Beachten Sie insbesondere, dass Anhänge in MIME-Typen konvertiert und in Text codiert werden. Daher müssen alle Anhänge, die Sie über Telnet senden möchten, in Text konvertiert und als solcher über das Telnet-Protokoll übertragen werden.


1

Wenn Sie nur testen, ob der Anhang zugestellt wurde, können Sie möglicherweise den Pre-MIME-Standard für Anhänge verwenden: uuencode. Im Gegensatz zu MIME ist das Erstellen von Nachrichten viel einfacher. Im Gegensatz zu MIME werden keine Header benötigt. Allerdings erkennen nicht mehr alle E-Mail-Clients nicht kodierte Dateien als Anhänge. Ich empfehle daher, zu testen, ob Sie sie verwenden können. Wenn ja, haben Sie sich gerade viel Mühe gespart. Wenn dies nicht der Fall ist, ist es wahrscheinlich der richtige Weg, Ihre MIMEed-Nachricht per Perl oder so vorab zu erstellen und durch NetCat zu leiten.

Einen Blick wert.


Vor 20 Jahren war das eine gute Antwort. Nicht jetzt. Verwenden Sie eine der vielen MIME-Bibliotheken und erstellen Sie eine MIME-kompatible E-Mail mit Base64-Codierung.
james.garriss

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.