텔넷 또는 넷캣을 사용하여 첨부 파일이 포함 된 전자 메일 보내기 파일을 첨부하는 방법을 아는 사람이 있습니까?

나는 종종 telnet 또는 netcat을 사용하여 smtp 서버를 연결하여 테스트 이메일을 보냅니다.

텔넷이나 넷캣을 사용하여 이메일을 보내지 만 파일을 첨부하는 방법을 아는 사람이 있습니까? 아마도 더 좋은 방법이 있지만 여전히 알고 싶습니다 🙂

목표를 달성하기 위해 작은 bash 쉘을 사용하는 솔루션에 만족하지만 다른 도구를 사용하고 싶지는 않습니다 …



답변

자, 모든 사람들의 의견을 출발점으로 사용 하여이 바보 같은 혼란을 겪었습니다 🙂 …

{
    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

답변

Ick. 첨부 파일을 base64로 인코딩하고 MIME 헤더를 만들어야합니다.

매번 “즉석에서”새 메시지를 생성하는 대신 “실제”전자 메일 프로그램에서 매우 간단한 예제 메시지를 전자 메일로 보내는 것이 더 쉬울 것입니다. 올바른 인코딩 및 MIME 헤더 작성).

해당 메시지를 헤더가있는 텍스트 파일 (물론 전송 헤더 제거)에 저장하고 나중에 세션을 위해 텔넷 또는 netcat에 수정 / 복사 / 붙여 넣기하십시오.


답변

SMTP 서버를 손으로 직접 테스트하는 것이 가능하고 실행 가능하지만이를 위해 설계된 도구를 사용하는 것이 훨씬 쉽습니다.

이 기사에서는 SWAKS에 대해 설명합니다 . swaks는 smtp 서버 테스트를 위해 설계되었습니다. 첨부 파일, 인증 및 암호화를 지원합니다!


답변

내가 같은 것을 찾는 동안 나는이 항목을 우연히 발견했다. 그리고 여기의 차양과 내가 추가 스크립트를 작성 하여이 스크립트를 만들었습니다.

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

추가하고 싶은 것이 인증입니다. 나는 그것을 추가하지 않아서 그것을 필요로하지 않습니다.

md5sum , netcat , file , awkbase64 명령 만 필요하다고 생각합니다 . 대부분의 시스템에서 표준이라고 생각합니다.


답변

이것은 내가 bash로 이메일을 보내려고하는 일입니다. 로그 파일과 외부 IP 주소를 보내려면 사용하십시오. 자유롭게 사용하십시오.

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

그것이 당신에게 좋기를 바랍니다.)

psirac.


답변

Telnet-첨부 파일이 여러 개인 전자 메일 보내기

고양이 attachment.zip | base64> zip.txt
고양이 attachment.pdf | base64> pdf.txt

# 내용 유형 : text / csv; CSV 파일의 경우 name = "$ FILE"#
# Content-Type : application / x-msdownload; name = "$ FILE"# 실행 파일
# 내용 유형 : text / xml; XML 파일의 경우 name = "$ FILE"# 또는 application / xml을 사용해보십시오.

텔넷 smtp.server.dom 25

헬리콥터
메일 : email@server.com
RCPT TO : email@server.com
데이터
제목 : 테스트 이메일
보낸 사람 : email@server.com
받는 사람 : email@server.com
MIME 버전 : 1.0
내용 유형 : multipart / mixed; boundary = "X-=-=-=-텍스트 경계"

--X-=-=-= 텍스트 경계
내용 유형 : 텍스트 / 일반

귀하의 메시지를 여기에 넣으십시오 ...

--X-=-=-= 텍스트 경계
내용 유형 : application / zip; name = "file.zip"
콘텐츠 전송 인코딩 : base64
내용 처리 : 첨부; filename = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... zip.txt 복사 / 붙여 넣기

--X-=-=-= 텍스트 경계
내용 유형 : text / pdf; name = "file.pdf"
콘텐츠 전송 인코딩 : base64
내용 처리 : 첨부; filename = "file.pdf"

UEsDBBQAAAAIAG1 + zEoQa .... 복사 / 붙여 넣기 pdf.txt

--X-=-=-= 텍스트 경계
.

떠나다

답변

SMTP 프로토콜 사양을 검토해야합니다. 기술 사양에 대해 놀랍도록 가볍게 읽었으며 전자 메일 프로세스의 작동 방식을 이해하는 데 도움이됩니다.

특히 첨부 파일은 MIME 형식으로 변환되고 텍스트로 인코딩되므로 텔넷을 통해 전송하려는 첨부 파일은 텍스트로 변환하여 텔넷 프로토콜을 통해 전송해야합니다.