gpt4 book ai didi

linux - Shell Script (Csh shell) 发送附件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:06 25 4
gpt4 key购买 nike

我已经创建了一个 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++查看)

原始文件(工作!):<​​/p>

%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="$1"
set SENDTO="$2"
set SENDCC="$3"
set SENDFM="$4"
set MAIFI=$5
set TMPFI=$5_tmp
set ATTACH=$6

set ERRIND=0
if ($?MXIB_MAILPROG == 0) set MXIB_MAILPROG=''
if ($?MXIB_MAILSYFM == 0) set MXIB_MAILSYFM=''
echo "`date` $1 $2 $3 $4 $5" >>$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 "$1" $SENDTO
else
cat $TMPFI | mutt -s "$1" -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

关于linux - Shell Script (Csh shell) 发送附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com