尝试通过邮件发送多个文本附件

尝试通过邮件发送多个文本附件

在“Red Had Enterprise Linux Server 版本 5.11 (Tikanga)”上运行此脚本

邮件是:版本8.1 6/6/93(看起来很旧)。

尝试了各种方法,但似乎无法使其发挥作用。

echo "Email message" | mail -a /home/user/checks/notprocessed.txt -a /home/user/checks/dirlist.txt -s "Subject" [email protected] /home/user/checks

结果消息:

邮件:无效选项 -- a

mutt 尚未安装,我对该系统的访问权限有限,因为它属于我工作的公司所有。我可以添加其他组件,但必须经历变更管理和相关流程。

uuencode 也不可用。

这是我今天使用的,我正在尝试添加第二个文件:

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt /home/user/checks/dirlist.txt

   exit -20
fi

并且.. /home/user/checks/dirlist.txt 未附加或包含在电子邮件中。我希望 /home/user/checks/dirlist.txt 实际上是一个附件

这实际上确实有效 - 但包括 notprocessed.txt 作为电子邮件的正文。

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt

   exit -20
fi

答案1

好吧,当您执行标准输入重定向(<)时,会发生的情况是,第一个文件(而且只有第一个)被打开,并将其内容传递到mail使用它作为正文的标准输入。

由于您的mailx实现较旧,因此它不支持当前版本的-a标志来创建 MIME 附件。您可以做的是使用可用的东西自己创建 MIME 格式。

幸运的是,使用简单的 bash 脚本并不难(我 100% 确定该脚本可用,即使在 RHEL 5 上也是如此:-)),就像这样简单的事情可能会做到:

#!/bin/bash
msgid="$RANDOM$RANDOM$RANDOM$RANDOM"
to="$1"
shift
subject="$1"
shift
echo "To: $to"
echo "From: [email protected]"
echo "Subject: $subject"
echo "Message-ID: $msgid"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=$msgid"
echo "" # header termination
while [ -n "$1" ]; do 
    echo "--$msgid"
    echo "Content-Type: text/plain; charset=UTF-8"
    echo "Content-Disposition: attachment; filename=\"$(basename $1)\""
    echo "Content-Transfer-Encoding: base64"
    echo ""
    base64 < "$1"
    shift
done

然后您只需将生成的电子邮件文本提交以sendmail进行传递,如下所示:

mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \
   /home/user/checks/dirlist.txt | sendmail -t

该脚本使用base64“ASCII Armor”文件的命令,因此您可以发送文本和二进制文件,但如果您不发送文本文件,您可能想弄清楚如何正确设置附件Content-type(或者只是将其全部更改为application/octet-stream,即“二进制”)。该命令作为 RHEL 5 上 coreutils 的一部分提供,因此我预计使用它不会出现任何问题。

另请注意,使用该-t标志可以sendmail使 MTA 仅从邮件本身读取电子邮件信封,因此无需在sendmail命令参数中添加任何其他内容。只需确保脚本在输出中包含所有需要的字段 - 我已经让它像那样从命令行读取收件人和主题mailx,但这不是必需的,而且发件人地址无论如何都是硬编码的。

相关内容