我正在尝试发送一封带有附件的电子邮件,并使用以下 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 部分以不同的格式表示相同的信息,但这可能取决于收件人的用户代理,因此您的里程数可能会有所不同。