私はしばしばテストとしてメールを送信するためにtelnetまたはnetcatを使用してsmtpサーバーを接続します。
誰もtelnetまたはnetcatを使用して電子メールを送信する方法を知っていますが、ファイルも添付しますか?おそらくより良い方法がありますが、私はまだ知りたいです:-)
私は目標を達成するために小さなbashシェルを使用するソリューションに満足していますが、他のツールを使用したくない...
私はしばしばテストとしてメールを送信するためにtelnetまたはnetcatを使用してsmtpサーバーを接続します。
誰もtelnetまたはnetcatを使用して電子メールを送信する方法を知っていますが、ファイルも添付しますか?おそらくより良い方法がありますが、私はまだ知りたいです:-)
私は目標を達成するために小さな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
うん 添付ファイルをbase64でエンコードし、MIMEヘッダーを作成する必要があります。
毎回「オンザフライ」で新しいメッセージを生成するのではなく、「本物の」電子メールプログラムから非常に短い例のメッセージを自分で電子メールで送信する方が簡単でしょう。適切なエンコーディングに変換し、MIMEヘッダーを作成します)。
そのメッセージをヘッダー付きのテキストファイルに保存し(もちろんトランスポートヘッダーを削除し)、将来のセッションのためにそれをtelnetまたは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
追加したいことの1つは認証です。必要ないので追加しません。
md5sum、netcat、file、awk、およびbase64コマンドのみが必要だと思います。idは、ほとんどのシステムでかなり標準であると推測します。
これは、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
それがあなたにとって良かったと思います;)
サイラック。
Telnet-複数の添付ファイル付きのメールを送信
猫attachment.zip | base64> zip.txt 猫attachment.pdf | base64> pdf.txt #Content-Type:text / csv; name = "$ FILE"#CSVファイルの場合 #Content-Type:application / x-msdownload; name = "$ FILE"#実行可能ファイルの場合 #Content-Type:text / xml; name = "$ FILE"#xmlファイルの場合、またはapplication / xmlを試す telnet smtp.server.dom 25 ヒーロー MAIL FROM:email@server.com RCPT TO:email@server.com データ 件名:テストメール From:email@server.com 宛先:email@server.com MIMEバージョン:1.0 コンテンツタイプ:multipart / mixed; boundary = "X-=-=-=-text boundary" --X-=-=-=-テキスト境界 コンテンツタイプ:テキスト/プレーン ここにメッセージを入れてください... --X-=-=-=-テキスト境界 コンテンツタイプ:application / zip; name = "file.zip" コンテンツ転送エンコード:base64 Content-Disposition:添付; filename = "file.zip" UEsDBBQAAAAIAG1 + zEoQa .... zip.txtのコピー/貼り付け --X-=-=-=-テキスト境界 コンテンツタイプ:text / pdf; name = "file.pdf" コンテンツ転送エンコード:base64 Content-Disposition:添付; filename = "file.pdf" UEsDBBQAAAAIAG1 + zEoQa .... pdf.txtのコピー/貼り付け --X-=-=-=-テキスト境界 。 終了する
テストしているのが「添付ファイルの配信」だけである場合は、MIME以前の添付ファイルの標準であるuuencodeを使用することで逃げることができます。MIMEとは異なり、メッセージを作成する方がはるかに簡単です。MIMEとは異なり、ヘッダーは必要ありません。ただし、すべてのメールクライアントがuuencodeされたファイルを添付ファイルとして認識するわけではないため、使用できるかどうかをテストすることをお勧めします。もしそうなら、あなたは自分自身に多くの労力を節約しました。そうでない場合は、perlなどを使用して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のおかげで素晴らしい作品です;)