我必须从 UNIX 计算机通过电子邮件发送电子邮件正文中的 HTML 文件。让我们将 HTML 文件称为hello.html
我在中使用以下代码bash script
,
(
echo "To: [email protected]"
echo "Subject: Report"
echo "Content-Type: text/html"
echo
cat hello.html
echo
) | /usr/sbin/sendmail -t
上面的代码对我来说工作得很好。现在我还想在这封电子邮件中附加一个 zip 文件。有什么办法可以做到这一点吗?
我仅限于使用mail
,mailx
和/usr/sbin/sendmail
。
答案1
我建议您向自己发送一封带有 zip 文件附件的实际电子邮件,并查看原始内容。
您会发现电子邮件的格式将按照哑剧标准,指定如何在文本电子邮件中包含各种文件格式。
在你的情况下,顶级内容类型会是这样的多部分/替代或者多部分/混合。其中将有两个或多个具有自己的部分或部分内容类型。一个会有类型应用程序/zip。这应用程序/zip部分将包含 zip 文件的文本编码(例如 Base 64)。
这是一个示例:
From: John Doe <[email protected]>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="XXXXboundary text"
This is a multipart message in MIME format.
--XXXXboundary text
Content-Type: text/plain
this is the body text
--XXXXboundary text
Content-Type: text/html
<html>
...Body of email in HTML format...
</html>
--XXXXboundary text
Content-Type: application/zip;
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="test.zip"
BASE64 ENCODING TEXT HERE
--XXXXboundary text--
更多信息:使用 MIME 的电子邮件文件附件
回到你问题的根源,如何做到这一点?我不熟悉任何可以帮助构建这样的电子邮件的独立工具,但如果您找不到有用的东西,我会感到惊讶。也许电子邮件客户端之一支持命令行/批量操作。但如果情况最糟,它只是 ASCII 文本,因此您可以按照处理 HTML 电子邮件的方式轻松手动构建它。但我建议您在将消息传送到邮件代理之前将其构建在临时文件中。 (查看“此处文档”以轻松保存大量文本。)
如前所述,您需要将 zip 文件转换为 Base 64。几乎每个 Linux 安装都应该有该base64
实用程序或等效工具。只需将您的 zip 传递给它并在适当的时间附加到您的电子邮件文件...
base64 test.zip >> my-email-file.txt
答案2
#!/usr/bin/ksh
export MAILTO="email_address"
export CONTENT="/export/home/aisdba/email_body.html"
export SUBJECT="subject of email"
(
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
cat $CONTENT
) | /usr/sbin/sendmail $MAILTO
( 或 ) 作为您可以发送的内联邮件。
cat <<'EOF' - CH_ARG.html | /usr/sbin/sendmail $TARGET_DL
Subject: your subject line
Content-Type: text/html
MIME-Version: 1.0
Content-Disposition: inline
EOF
( 或 ) 尝试下面的附件
cat <<'EOF' - CH_ARG.html | /usr/sbin/sendmail $TARGET_DL
Subject: Your subject line
Content-Type: text/text
MIME-Version: 1.0
Content-Disposition: attachment
EOF