带有 CSV 文件和纯文本正文的 Sendmail

带有 CSV 文件和纯文本正文的 Sendmail

我正在尝试发送一封带有附件的电子邮件,并使用以下 shell 脚本CSV file打印文本文件中的可用数据。Email body但我只收到附件,并且在执行以下脚本后收到的电子邮件中没有可用的电子邮件正文,有人可以帮助解决该问题吗?

脚本执行:

sh <script_name> CSV File 2012 

代码 - 1:

#!/bin/bash
export MAILTO="[email protected]"
export SUBJECT="Test - \"$1\""
export BODY="$2.txt"
export ATTACH_CSV=""$2"_"$3".csv"
csv_file=$( basename "$ATTACH_CSV" )
{
echo "To: $MAILTO"
echo "Subject: $SUBJECT"
echo "Content-Type: multipart/mixed; boundary=\"FILEBOUNDARY\""
echo "--FILEBOUNDARY"
echo "Content-Type: multipart/mixed; boundary=\"MSGBOUNDARY\""
echo "--MSGBOUNDARY"
echo "Content-Type: text/html; charset=iso-8859-1"
echo "Content-Transfer-Encoding: 8bit"
#echo "Content-Disposition: inline"
cat "$BODY"
echo "--MSGBOUNDARY--"
echo "--FILEBOUNDARY"
echo "Content-Type: text/csv"
echo "Content-Disposition: attachment; filename=\"${csv_file}\""
echo "Content-Transfer-Encoding: uuencode"
uuencode "$ATTACH_CSV" "$csv_file"
echo "--FILEBOUNDARY--"
} | sendmail -t

代码 - 2:

#!/bin/bash
export MAILTO="[email protected]"
export SUBJECT="Test - \"$1\""
export BODY="$2.txt"
export ATTACH_CSV=""$2"_"$3".csv"
csv_file=$( basename "$ATTACH_CSV" )
{
        echo "To: $MAILTO"
        echo "Subject: $SUBJECT"
        echo "Content-Type: multipart/mixed; boundary=\"FILEBOUNDARY\""

        echo "--FILEBOUNDARY"
        echo "Content-Type: multipart/alternative; boundary=\"MSGBOUNDARY\""

        echo "--MSGBOUNDARY"
        echo "Content-Type: text/plain; charset=iso-8859-1"
        echo "Content-Transfer-Encoding: 8bit"
        echo "Content-Disposition: inline"
        cat "$BODY"
        echo "--MSGBOUNDARY--"

        echo "--FILEBOUNDARY"
        echo "Content-Type: text/csv"
        echo "Content-Disposition: attachment; filename=\"${csv_file}\""
        echo "Content-Transfer-Encoding: uuencode"
        uuencode "$ATTACH_CSV" "$csv_file"
        echo "--FILEBOUNDARY--"
} | /usr/sbin/sendmail -t

答案1

  • 您正在构造无效消息。消息头和正文之间始终需要一个空行。在标头中,出现了两次Content-Type:具有不同边界定义的 ,并且它们之间的边界字符串仅属于正文中单独的 MIME 部分。我建议您查找一些有关如何构建 MIME 消息的深入信息或教程。
  • 当您将本质上相同的信息一次表示为文本,一次表示为 CSV 文件时,最好使用 来multipart/alternative表示这两个 MIME 部分以不同的格式表示相同的信息,但这可能取决于收件人的用户代理,因此您的里程数可能会有所不同。

相关内容