Shell 脚本使用 sendmail 嵌入多个图像

Posted

技术标签:

【中文标题】Shell 脚本使用 sendmail 嵌入多个图像【英文标题】:Shell script embed multiple image with sendmail 【发布时间】:2015-11-20 10:21:52 【问题描述】:

我正在使用以下脚本使用 sendmail 功能在邮件中嵌入多个图像。

sendmail -t <<EOT
TO: example_to@xyz.com
FROM: example_from@xyz.com
Cc: example_cc@xyz.com
SUBJECT: Phobos Report 
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" ><br/>
<img src="cid:part2.06090408.01060107" ><br/>
<img src="cid:part3.06090408.01060107" >
</body>
</html>

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

$(base64 rag1.jpg)

--XYZ

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

$(base64 rag2.jpg)

--XYZ

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

$(base64 rag3.jpg)
--XYZ--
EOT

这里只有第一个图像被嵌入。并且所有其他人都未能添加。这两个图像被添加为基于文本的附件。如何在此脚本上添加多个图像?

【问题讨论】:

【参考方案1】:

这是一个老问题,但我认为无论如何都值得回答。

您的代码的问题是您在 MIME 边界和最后两个图像的 MIME 标头之间放置了空行,如下所示:

--XYZ

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

这是不允许。您应该更正您的代码并删除两个地方的空行,如下所示:

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

这里:

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

在边界线之前允许空行,这意味着它们将成为前面的主体的一部分,它们通常是无害的(但我可以弥补上下文他们不会在哪里。但是,这不是你的情况。)

最好不要在 MIME 边界的两侧放置多余的空行。当然,这与第一个 MIME 边界之前所需的空行无关,它分隔 MIME 标头。

【讨论】:

拯救了我的下午......我把头发拉出来了!【参考方案2】:

尝试不使用换行标记

<img src="cid:part1.06090408.01060107" >
<img src="cid:part2.06090408.01060107" >
<img src="cid:part3.06090408.01060107" >

自己测试过,效果很好

【讨论】:

不,删除 &lt;br/&gt; 是不够的,对我不起作用。 @Dario 你是对的。我现在测试了它和它的 NOGO,在边界和标题之间用空行

以上是关于Shell 脚本使用 sendmail 嵌入多个图像的主要内容,如果未能解决你的问题,请参考以下文章

据说会这 24 道 shell 脚本面试题的程序员,都月薪上万了!

我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?

嵌入式linux应用开发之常用shell脚本总结

分享嵌入式中几个实用的shell脚本!

使用 webpack 将多个 ES6 类捆绑到一个文件中,以便在脚本标签中导入

linux shell脚本嵌入一段expect