Shell脚本(Cshshell)发送附件

Shell Script (Csh shell) send attachement

我已经创建了一个 shell 脚本来从 linux 发送电子邮件,它有效。

我正在尝试修改它,以便它可以发送附件(我知道,故事永无止境)。 -> 下面的代码

脚本接受6个参数如下

1. Subject
2. Recipient
3. CC
4. From
5. html body (from file)
6. attachement

脚本可以执行如下:

mailertest.csh "test subject" "me@something.com" "" "info@something.com" "mailbody.txt" "attachement.pdf"

到目前为止,我已经知道它确实会发送附件,但除普通 .txt 文件之外的任何内容都无法读取。

当我比较文件(原.pdf,接收.pdf)的唯一!区别这上面的部分(我用notepad++查看)

原始文档(工作中!):

%PDF-1.5
%âãÏÓ
10 0 obj
<</Linearized 1/L 69639/O 12/E 65128/N 1/T 69334/H [ 460 154]>>
endobj

收到的文件(已损坏!):

5128/N 1/T 69334/H [ 460 154]>>
endobj

我确定我快到了,但是还缺少一些小东西!?

这是整个脚本

#!/bin/csh
set LOGF1=$MXIB_PLOG/mxmail09.log
set SENDSJ=""
set SENDTO=""
set SENDCC=""
set SENDFM=""
set MAIFI=
set TMPFI=_tmp
set ATTACH=

set ERRIND=0
if ($?MXIB_MAILPROG == 0) set MXIB_MAILPROG=''
if ($?MXIB_MAILSYFM == 0) set MXIB_MAILSYFM=''
echo "`date`     "            >>$LOGF1
if ($ERRIND == 0) then
    if ($SENDTO == '') then
        echo "missing mail to address"      >>$LOGF1
        set ERRIND=1
    endif
endif
if ($ERRIND == 0) then
    if ($SENDFM == 'system') then
        if ($MXIB_MAILSYFM == '') then
            set SENDFM=system@`hostname`
        else
            set SENDFM="$MXIB_MAILSYFM"
        endif
    endif


    echo "To: $SENDTO"                  >$TMPFI
    echo "MIME-Version: 1.0"            >>$TMPFI
    echo 'Content-Type: multipart/mixed; boundary="-q1w2e3r4t5"' >>$TMPFI
    echo >>$TMPFI
    echo '---q1w2e3r4t5' >>$TMPFI

    echo "Content-Type: text/html"      >>$TMPFI
    echo "Content-Disposition: inline"      >>$TMPFI

    echo "<html>"                   >>$TMPFI
    echo "<body>"                   >>$TMPFI
    echo "<pre style="font: monospace">"        >>$TMPFI
    cat $MAIFI | sed 's/</ /g' | sed 's/>/ /g'  >>$TMPFI
    echo "</pre>"                   >>$TMPFI
    echo "</body>"              >>$TMPFI
    echo "</html>"              >>$TMPFI

    echo "---q1w2e3r4t5"            >>$TMPFI


    echo "Content-Type: application; name=" basename $ATTACH  >>$TMPFI
    echo "Content-Transfer-Encoding: base64"            >>$TMPFI
    echo "Content-Disposition: attachment; filename=$ATTACH"                >>$TMPFI


    base64 $ATTACH  >>$TMPFI


     echo "---q1w2e3r4t5--"                             >>$TMPFI

    if ($MXIB_MAILPROG == 'mutt') then
        if ($SENDCC == '' || $SENDCC == 'none') then
            cat $TMPFI | mutt -s "" $SENDTO
        else
            cat $TMPFI | mutt -s "" -c $SENDCC $SENDTO
        endif
    else
        ##/usr/lib/sendmail -F $SENDFM -f $SENDFM $SENDTO $SENDCC <$TMPFI
        echo "Subject: $SENDSJ" | cat - $TMPFI | /usr/lib/sendmail -F $SENDFM -f $SENDFM -t $SENDTO
    endif
endif
unset ERRIND
unset SENDFM
unset SENDCC
unset SENDTO
unset SENDSJ
unset MAIFI
unset LOGF1
exit(0)

base64编码文件前需要有一个空行

这是缺少的行:

echo ""             >>$TMPFI

在上下文中:

echo "Content-Disposition: attachment; filename=$basename"              >>$TMPFI
    echo ""             >>$TMPFI
    base64 $ATTACH  >>$TMPFI