2013-07-31 35 views
8

Với các bài đăng trước trong SO.com, tôi đã thử xây dựng kịch bản của mình để gửi email đến tài khoản Outlook của tôi với hình ảnh nội tuyến trong phần thân email. Nhưng nội dung html được hiển thị trong html thay vì hiển thị hình ảnh. Hãy giúp tôi.Unix sendmail - hình ảnh nhúng html không hoạt động

Dưới đây là đoạn mã của tôi

{ 
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 Tôi nhận được chứa bên dưới thay vì hiển thị hình ảnh,

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

Bạn có thể xin vui lòng giúp đỡ tôi trong những gì am i thiếu

Trả lời

16

Cách bạn sử dụng echo để in tiêu đề thư nó ăn tất cả các dấu ngoặc kép - bạn cần phải thoát chúng bằng dấu gạch chéo ngược (\") để làm cho nó hoạt động.

Ngoài ra, ranh giới của bạn là sai. Nếu bạn xác định boundary=--XYZ, thì mỗi phần thư cần bắt đầu bằng ----XYZ (bạn cần phải thêm hai dấu gạch ngang), nếu không ranh giới của bạn chỉ nên là XYZ. Và các tiêu đề của các phần mime phải được tách ra khỏi cơ thể bằng một dòng trống.

Nếu bạn thực sự cần phải tạo ra một mail từ một kịch bản shell, sau đó tư vấn cho tôi sẽ được thoát khỏi tất cả những tiếng vang và sử dụng một heredoc thay vì:

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 nhờ bạn. Giải thích rõ ràng và chi tiết. Bạn đá !! – Sathy

+0

Phản hồi tuyệt vời! Điều này cũng làm việc cho tôi với 'mail' thông thường, sử dụng' mail -r "<[email protected]>" -s "Thử nghiệm hình ảnh nhúng" -a "MIME-Phiên bản: 1.0" -a "Kiểu Nội dung: multipart/ranh giới = \ "XYZ \" "[email protected] << EOT' và sau đó bắt đầu heredoc với' --XYZ' và mọi thứ tiếp theo. – mat

+0

Làm cách nào để mở rộng chức năng này để sử dụng nhiều hình ảnh? – sugunan

Các vấn đề liên quan