如何发送HTML电子邮件附件和sendmail软件UNIX的ksh
问题描述:
我试图发送HTML邮件带有附件,但不工作,仅仅是发送文件如何发送HTML电子邮件附件和sendmail软件UNIX的ksh
下面的代码,是用HTML:
message="all the HTML message"
(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Testing HTML with attachment";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "${message}";
) | /usr/sbin/sendmail -t
,但我尝试添加这样的附件:
message="all the HTML message"
(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Testing HTML with attachment";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "Content-Transfer-Encoding: base64"
echo "Content-Type: application/octet-stream; name=test_file.txt"
echo "Content-Disposition: attachment; filename=/directory/myfile"
echo "";
echo "${message}";
) | /usr/sbin/sendmail -t
不工作,只发送附件而不需任何可读的东西...任何想法?
答
echo "Content-Transfer-Encoding: base64" ... echo "${message}";
邮件传统上受限于ASCII数据和998个字符的线的长度。这意味着需要对二进制数据进行编码以遵守这些限制,并且需要指定编码类型。指定编码通过Content-Transfer-Encoding
标题完成,该标题正确设置为base64
。问题在于,您不会将数据编码为base64,而只是插入原始数据。在这种情况下,大多数邮件客户端会忽略任何不属于base64的字符(即A-Za-z0-9/+
以外的所有字符)作为垃圾。其余的将被视为base64编码并进行相应解码,导致您看到的垃圾数据。
因此,您不应该直接包含${message}
,而是首先对邮件进行编码。这可以使用base64 tool(如果可用)或使用uuencode --base64来完成。但使用uuencode,你绝对需要删除前缀和后缀行,并只保留编码数据。
除此之外,您应该也可以对HTML消息执行此操作,除非消息已经处于仅限ASCII字符的限制范围内,并且行长度限制为998个字符。在大多数情况下,它可能无需编码工作,但可能会因某些收件人而失败,具体取决于涉及的邮件服务器和邮件客户端的功能。