2013-07-31 2 views
8

С предыдущими сообщениями в SO.com я попытался создать свой сценарий для отправки электронной почты в мою учетную запись Outlook с помощью встроенного изображения в тело письма. Но содержимое html отображается в html, скорее отображая изображение. Пожалуйста помоги.Unix sendmail - html embed image not working

Вот мой сниппет

{ 
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 

Email Я получил содержит ниже, а отображения изображения,

--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. А заголовки частей мима должны быть отделены от тел пустой линией.

Если вам действительно нужно создать почту из скрипта, то мой совет должен был бы избавиться от всех эхо и использовать Heredoc вместо:

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 -r» <[email protected]> »-s« Тест встроенного изображения »-a« MIME-Version: 1.0 »-a« Content-Type: multipart/border = \ "XYZ \" "[email protected] << EOT', а затем запуск heredoc с' --XYZ' и все, что следует. – mat

+0

Как расширить эту функцию для использования нескольких изображений? – sugunan