#!/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 类型。
当然,您可以自己写所有这些,但您可能需要投入几个月的时间......