如何使用 shell 脚本作为 application/xls mimetype 发送带有附件 xls 文件的电子邮件,而不会使收到的文件变得不可读

如何使用 shell 脚本作为 application/xls mimetype 发送带有附件 xls 文件的电子邮件,而不会使收到的文件变得不可读
#!/bin/bash

ATTACH1=file.xls<br>
SUBJECT="subj"<br>
[email protected]<br>
[email protected]<br>
[email protected]<br>
MIME="Application/vnd.ms-excel" <br>
FILE=$ATTACH1<br>
boundary="---my-unlikely-text-for-mime-boundary---$$--" <br>
(cat <<!<br>
From: $FROM<br>
To: $TO<br>
Subject: $SUBJECT<br>
Date: $(date +"%a, %b %e %Y %T %z")<br>
Mime-Version: 1.0<br>
Content-Type: multipart/mixed; boundary="$boundary"<br>


This email has attached the file<br>
--$boundary<br>
Content-Type: $MIME;name="$FILE"<br>
Content-Disposition: attachment;filename="$FILE"<br>

!<br>
uuencode ${ATTACH1} ${ATTACH1}<br>
) | sendmail -v ${TO}<br>

你好,

上述代码可以使用 shell 脚本发送 xls 文件。但问题是,收到的文件无法打开。此外,xls 的文件大小变小了。例如:发送前原始 xls 附件大小为 17kb,但发送后收到的文件大小变为 378b。

我该怎么做才能使接收方打开收到的 xls 时可读?上述脚本有什么错误或缺失?请帮忙!!!!

顺便说一句,我不能使用 MUTT

答案1

您需要为附件的 MIME 部分指定 Content-Transfer-Encoding。我不知道 uuencode 是否是标准编码。不过 Base64 是。

您还需要发送结束边界标记。

您重定向到 cat 是错误的。

(cat << !
From: $FROM
To: $TO
Subject: $SUBJECT
Date: $(date +"%a, %b %e %Y %T %z")
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="$boundary"

This email has attached the file

--$boundary
Content-Type: text/plain; charset=ISO-8859-1

Please see the attachmed file.

--$boundary
Content-Transfer-Encoding: base64
Content-Type: $MIME;name="$ATTACH1"
Content-Disposition: attachment;filename="$ATTACH1"

$(base64 "$ATTACH1")

--$boundary--
!
) | sendmail -v "$TO"

答案2

无需构建自己的程序来发送邮件,只需使用现有的众多程序之一即可。您正在寻找的是邮件用户代理(MUA)。命令行上有很多选项可以发送邮件。例如,使用杂种狗

mutt [email protected] -s "My example subject" -a attachment.xlsx < mailbody.txt

这将发送邮件至[电子邮件保护],从文件“mailbody.txt”读取邮件正文,并附带附件 attachment.xlsx。Mutt 将为您完成所有细节工作,例如适当地编码邮件正文和为附件选择正确的 MIME 类型。

当然,您可以自己写所有这些,但您可能需要投入几个月的时间......

相关内容