我的目标是使用curl
发送一封带有html正文的电子邮件,其中包含嵌入式图像,例如:
我是这样发送电子邮件的:
curl "smtp://smtp.gmail.com:587" -v \
--mail-from "sender@gmail.com" \
--mail-rcpt "receiver@gmail.com" \
--ssl -u sender@gmail.com:secretpassword \
-T "message.txt" -k --anyauth
我的message.txt
看起来像:
From: Some Name <sender@gmail.com>
To: Some Name <receiver@gmail.com>
Subject: example of mail
Reply-To: Some Name <sender@gmail.com>
Cc:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="MULTIPART-MIXED-BOUNDARY"
--MULTIPART-MIXED-BOUNDARY
Content-Type: multipart/alternative; boundary="MULTIPART-ALTERNATIVE-BOUNDARY"
--MULTIPART-ALTERNATIVE-BOUNDARY
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
Content-Disposition: inline
PGh0bWw+Cjxib2R5PgogICAgPGRpdj4KICAgICAgICA8cD5IZWxsbywgPC9wPgogICAgICAgIDxw
PlBsZWFzZSBzZWUgdGhlIGxvZyBmaWxlIGF0dGFjaGVkPC9wPgogICAgICAgIDxwPkFkbWluIFRl
YW08L3A+CiAgICAgICAgPGltZyBzcmM9ImFkbWluLnBuZyIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1
MCI+CiAgICA8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==
--MULTIPART-ALTERNATIVE-BOUNDARY--
--MULTIPART-MIXED-BOUNDARY
解码的html为:
<html>
<body>
<div>
<p>Hello, </p>
<p>Please see the log file attached</p>
<p>Admin Team</p>
<img src="admin.png" width="150" height="50">
</div>
</body>
</html>
如何在此html中嵌入admin.png
,并使用curl
和bash
将另一个文件log.txt
附加到此电子邮件中?
4条答案
按热度按时间jgzswidk1#
我提出的解决方案是对所有附件(图像和文本文件)进行base64编码,并将它们直接包含在
multipart/mixed
主体中的上传文件中,例如:Content-Id
标头用于标识可在html中引用的资源,其中:cid:
,例如:下面是一个完整的
bash
示例,用于发送一封包含admin.png
嵌入图像和附加的log.txt
的html电子邮件:9w11ddsr2#
下面是一个可以使用的shell脚本。
密码可以存储在.netrc文件中,如以下内容所述:但我还没试过。
只需确保您需要的图像是使用base64编码嵌入到HTML中的。
pdkcd3nj3#
另外,你的代码示例有一点误导坚韧,事实上它不起作用。正如你所说,你只需要用一个边界将每个部分包围起来,在你的例子中,分隔符是:
“--多部分混合边界”。
尽管如此,它也可以是任何其他用户定义的字符串。您正在嵌套多个边界类型,这是不必要的。HTML内容不需要base64编码,如果您愿意,它可以去编码。
您需要在每个分隔符前后各有一个空行。
我建议您看一下W3的论文和示例:https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
mefy6pfw4#
@bertrand-martel的答案在我运行Ubuntu 22.04的系统上是基本正确的,并提交到我网络中的一个postfix服务器。html电子邮件消息通过得很好,而且我有正确命名的空附件。我不得不编辑他定义的add_file函数,并在最后的$3前添加一个空行。如果在Content-Disposition:和base64编码。我还必须在--MULTIPART-ALTERNATIVE-BOUNDARY--后面插入一个空行。一旦我做了这些更改,html消息、嵌入的图像和附加的文件都能正确显示。