2013-07-31 15 views
8

Wcześniejsze posty w SO.com Próbowałem budować mój skrypt, aby wysłać e-mail do mojego konta Outlook z obrazem w treści wiadomości e-mail. Ale zawartość html jest wyświetlana w html zamiast wyświetlania obrazu. Proszę pomóż.Unix sendmail - HTML obraz nie działa

Tu jest mój urywek

{ 
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 otrzymałem zawiera poniżej raczej wyświetlania obrazu,

--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-- 

Czy możesz mi pomóc w co jestem brakuje

Odpowiedz

16

sposób użyj echo, aby wydrukować nagłówki wiadomości, zjadasz wszystkie podwójne cudzysłowy - musisz uciec z nich za pomocą odwróconego ukośnika (\"), aby działał.

Twoja granica jest również błędna. Jeśli zdefiniujesz boundary=--XYZ, każda część wiadomości musi rozpocząć się od ----XYZ (musisz dodać dwa kreski), w przeciwnym razie twoja granica powinna być tylko XYZ. Nagłówki części pantomimy muszą być oddzielone od ciał pustą linią.

Jeśli naprawdę potrzebujesz, aby wygenerować wiadomość ze skryptu powłoki, to radzę byłoby pozbyć się wszystkich echa i używać heredoc zamiast:

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 dzięki tobie. Tak jasne i szczegółowe wyjaśnienie. Rządzisz!! – Sathy

+0

Niesamowita odpowiedź! To również zadziałało dla mnie za pomocą zwykłego 'mail', używając' mail -r "<[email protected]>" -s "Test obrazu osadzonego" -a "Wersja MIME: 1.0" -a "Content-Type: multipart/related; boundary = \ "XYZ \" "[email protected] << EOT', a następnie uruchamianie heredoc przez' --XYZ' i wszystko, co następuje. – mat

+0

Jak rozszerzyć tę funkcję, aby użyć wielu obrazów? – sugunan