Saltar al contenido

Envíe un correo electrónico con un archivo adjunto mediante telnet o netcat

Nuestro equipo de especialistas despúes de algunos días de investigación y de juntar de datos, hemos dado con la respuesta, esperamos que resulte de gran utilidad en tu trabajo.

Solución:

Solución 1:

Bien, usando los comentarios de todos como punto de partida, se me ocurrió este lío tonto 🙂 …

 openssl base64;
    echo '.';
 | telnet mx1.testdest.com 25

Solución 2:

Ick. Tendrá que codificar en base64 el archivo adjunto y crear los encabezados MIME.

En lugar de generar un nuevo mensaje “sobre la marcha” cada vez, probablemente sería más fácil enviarse un mensaje de ejemplo muy corto de un programa de correo electrónico “real” (aprovechando el trabajo que hicieron las personas que lo escribieron para colocar el archivo adjunto en la codificación adecuada y creando los encabezados MIME).

Guarde ese mensaje en un archivo de texto con sus encabezados (eliminando el encabezado de transporte, por supuesto) y simplemente modifíquelo / cópielo / péguelo en telnet o netcat para futuras sesiones.


Solución 3:

Si bien es posible y viable probar manualmente los servidores SMTP, usar una herramienta diseñada para esto será mucho más fácil.

Este artículo explica SWAKS. swaks está diseñado para pruebas de servidor smtp. Admite archivos adjuntos, autenticación y cifrado.


Solución 4:

Reflexioné sobre esta entrada mientras buscaba algo similar. y de los lectores aquí y algunas investigaciones adicionales logré hacer este guión.

#!/bin/sh

# Default reception
TOEMAIL="[email protected]";
# 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 [email protected]"
        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="[email protected]$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

Una cosa que quizás desee agregar es la autenticación. No lo necesito, así que no lo he agregado.

Creo que solo requiere md5sum, netcat, expediente, awk y el base64 comandos, supongo que son bastante estándar en la mayoría de los sistemas.


Solución 5:

Telnet: envíe correo electrónico con varios archivos adjuntos

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

# Content-Type: text/csv; name="$FILE"                        # for CSV files
# Content-Type: application/x-msdownload; name="$FILE"    # for executable 
# Content-Type: text/xml; name="$FILE"                        # for xml files or try application/xml

telnet smtp.server.dom 25

HELO
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: Test email
From: [email protected]
To: [email protected]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="X-=-=-=-text boundary"

--X-=-=-=-text boundary
Content-Type: text/plain

Put your message here...

--X-=-=-=-text boundary
Content-Type: application/zip; name="file.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="file.zip"

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

--X-=-=-=-text boundary
Content-Type: text/pdf; name="file.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="file.pdf"

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

--X-=-=-=-text boundary
.

QUIT

Al final de la post puedes encontrar las referencias de otros administradores, tú además tienes la opción de dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *