2016-06-27 10 views
1

Я ищу решение, используя bash и ncat. Отключение this question on ServerFault, я переработал его, mostly this answer, очень в основном; позволяя включить получателя СС, используя ncat вместо netcat и очищая его для моего использования (простые вещи). Как видно здесь:Отправка нескольких вложений электронной почты base64 с помощью ncat/netcat/telnet

# Email Recipient 
TOEMAIL="$REPORTRCPT"; 
# Default Subject 
SUBJECT="Build report for $MACHINEFQDN - $DATE @ $DATETIME (PST)"; 
# Default Contents 
MSGBODY="See attachment. Includes all output as seen while running the script."; 
# Default Attachment 
ATTACHMENT="/tmp/$MACHINENAME-build-$DATE.html" 
ATTACHMENT2="/tmp/40_custom-$MACHINENAME-$DATE" 
# Default smtp server 
mailserver="111.111.111.112" 
mailserverPort="25" 

fappend() { 
    echo "$2">>$1; 
} 

domain=`grep search /etc/resolv.conf | awk '{print $2;}'` 
computer=`hostname` 
user=`whoami` 
FREMAIL="[email protected]$computer.$domain" 

MIMETYPE=`file --mime-type -b $ATTACHMENT` 
MIMETYPE2=`file --mime-type -b $ATTACHMENT2` 
TMP="/tmp/tmpmail_"`date +%N`; 
BOUNDARY=`date +%s|md5sum|awk '{print $1;}'` 
FILENAME=`basename $ATTACHMENT` 
FILENAME2=`basename $ATTACHMENT2` 

DATA=`cat $ATTACHMENT|base64` 
DATA2=`cat $ATTACHMENT2|base64` 

rm $TMP 2> /dev/null 

fappend $TMP "EHLO $computer.$domain" 
fappend $TMP "MAIL FROM:<$FREMAIL>" 
fappend $TMP "RCPT TO:<$TOEMAIL>" 
fappend $TMP "RCPT TO:<$REPORTRCPTCC>" 
fappend $TMP "DATA" 
fappend $TMP "From: $FREMAIL" 
fappend $TMP "To: $TOEMAIL" 
fappend $TMP "Cc: $REPORTRCPTCC" 
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" 

ncat $mailserver $mailserverPort < $TMP >> $TMP 
rc="$?" 
if [ "$rc" -ne "0" ]; then 
    echo "Returncode: $rc" 
    echo "Please inspect $TMP" 
else 
    echosuccess "Email successfully sent, you should receive it!" 
    rm $TMP; 
fi 

Но то, что я постоянно пытаюсь надувать в него есть несколько base64 вложений. Я пробовал различные места размещения вещей, BOUNDARY и т. Д., Добавляя дополнительные переменные, как вы можете видеть выше. Но я подхожу. Кто-нибудь знакомый и способный протянуть руку? Я надеялся, что это будет так же легко и просто, как добавление получателя СС.

ответ

0

В принципе, ваш скрипт работал для меня (после некоторых настроек, таких как замена ncat с помощью telnet). Вы должны следовать его совету и «Пожалуйста, проверьте $ TMP». Но вы не должны добавлять диагностический вывод на вход с < $TMP >> $TMP; лучше использовать отдельный файл вывода журнала. Кроме того, подход

DATA=`cat $ATTACHMENT|base64` 

работает только при условии, Вы могли бы заменить

fappend $TMP "$DATA" 

с

base64 $ATTACHMENT >>$TMP 

преодолеть этот порог.