2013-07-31 23 views
8

随着在SO.com的先前职位,我已经尝试建立我的脚本发送电子邮件到我的Outlook帐户与电子邮件正文中的图像内联。但是html内容正在显示在html中而不是显示图像。请帮忙。Unix发送邮件 - HTML嵌入图像不工作

这里是我的代码段

{ 
echo "TO: [email protected]" 
echo "FROM: [email protected]>" 
echo "SUBJECT: Embed image test" 
echo "MIME-Version: 1.0" 
echo "Content-Type: multipart/related;boundary="--XYZ"" 

echo "--XYZ" 
echo "Content-Type: text/html; charset=ISO-8859-15" 
echo "Content-Transfer-Encoding: 7bit" 
echo "<html>" 
echo "<head>" 
echo "<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">" 
echo "</head>" 
echo "<body bgcolor="#ffffff" text="#000000">" 
echo "<img src="cid:part1.06090408.01060107" alt="">" 
echo "</body>" 
echo "</html>" 


echo "--XYZ" 
echo "Content-Type: image/jpeg;name="sathy.jpg"" 
echo "Content-Transfer-Encoding: base64" 
echo "Content-ID: <part1.06090408.01060107>" 
echo "Content-Disposition: inline; filename="sathy.jpg"" 
echo $(base64 sathy.jpg) 
echo "' />" 
echo "--XYZ--" 
}| /usr/lib/sendmail -t 

电子邮件我收到包含以下,而显示图像,

--XYZ 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 7bit 
<html> 
<head> 
<meta http-equiv=content-type content=text/html 
</head> 
<body bgcolor=#ffffff text=#000000> 
<img src=cid:part1.06090408.01060107 alt=> 
</body> 
</html> 
--XYZ 
Content-Type: image/jpeg;name=sathy.jpg 
Content-Transfer-Encoding: base64 
Content-ID: <part1.06090408.01060107> 
Content-Disposition: inline; filename=sathy.jpg 
/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAoAAD/4QNxaHR0cDov 
....base64 values..... 
/> 
--XYZ-- 
----XYZ-- 

能否请您帮助我我缺少什么

回答

16

这就是你使用echo打印邮件标题,它会消耗所有双引号 - 您需要使用反斜杠(\")将它们转义以使其正常工作。

此外,你的边界是错误的。如果你定义了boundary=--XYZ,那么每个消息部分需要以----XYZ(你需要两个破折号)开始,否则你的边界应该只有XYZ。并且MIME部分的标题必须通过空行与主体分开。

如果你真的需要从一个shell脚本生成的邮件,那么我的建议是摆脱所有的回声,并使用定界符来代替:

sendmail -t <<EOT 
TO: [email protected] 
FROM: <[email protected]> 
SUBJECT: Embed image test 
MIME-Version: 1.0 
Content-Type: multipart/related;boundary="XYZ" 

--XYZ 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 7bit 

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15"> 
</head> 
<body bgcolor="#ffffff" text="#000000"> 
<img src="cid:part1.06090408.01060107" alt=""> 
</body> 
</html> 

--XYZ 
Content-Type: image/jpeg;name="sathy.jpg" 
Content-Transfer-Encoding: base64 
Content-ID: <part1.06090408.01060107> 
Content-Disposition: inline; filename="sathy.jpg" 

$(base64 sathy.jpg) 
--XYZ-- 
EOT 
+0

1/0的感谢。所以清楚和详细的解释。你摇滚! – Sathy

+0

真棒回应!这也适用于我定期的'mail',使用'mail -r <[email protected]>“-s”嵌入图片测试“-a”MIME-Version:1.0“-a”Content-Type:multipart/related; boundary = \“XYZ \”“[email protected] << EOT',然后用'--XYZ'开始heredoc以及后面的所有内容。 – mat

+0

如何扩展此功能以使用多个图像? – sugunan