나는 종종 telnet 또는 netcat을 사용하여 smtp 서버를 연결하여 테스트 이메일을 보냅니다.
텔넷이나 넷캣을 사용하여 이메일을 보내지 만 파일을 첨부하는 방법을 아는 사람이 있습니까? 아마도 더 좋은 방법이 있지만 여전히 알고 싶습니다 :-)
목표를 달성하기 위해 작은 bash 쉘을 사용하는 솔루션에 만족하지만 다른 도구를 사용하고 싶지는 않습니다 ...
나는 종종 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
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 , awk 및 base64 명령 만 필요하다고 생각합니다 . 대부분의 시스템에서 표준이라고 생각합니다.
이것은 내가 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-=-=-= 텍스트 경계 . 떠나다
테스트중인 모든 것이 '첨부 파일이 배달되었습니다'라면 MIME 사전 표준 첨부 파일 인 uuencode를 사용하여 벗어날 수도 있습니다. MIME과 달리 메시지를 작성하는 것이 훨씬 간단합니다. MIME과 달리 헤더가 필요하지 않습니다. 그러나 모든 메일 클라이언트가 인코딩되지 않은 파일을 더 이상 첨부 파일로 인식하지는 않으므로 사용할 수 있는지 테스트하는 것이 좋습니다. 그렇다면 많은 노력을 아끼지 않았습니다. 그렇지 않다면 펄이나 무언가를 통해 MIME 메시지를 미리 구성하고 NetCat과 같은 것을 통해 파이프하는 것이 아마도 방법입니다.
한 번 봐
이 작업에는 멋진 Perl 스크립트가 있습니다. 여기에서 찾을 수 있습니다.
http://www.logix.cz/michal/devel/smtp-cli/
smtp-cli v2.9
스크립트는 작성자 : Michal Ludvig (c) 2003-2011 http://smtp-cli.logix.cz
나는 그것을 직접 사용하고 Michal 덕분에 훌륭하게 작동합니다.)