我正在尝试使用 procmail 自动回复。我想发回带有附件的 HTML 表单(图像;jpg/png)。有没有一种简单的方法可以实现这一点?这是我到目前为止的代码:
:0
| ($FORMAIL -rA "$XLOOP" -i "Content-Type: text/html; Content-Transfer-Encoding: base64" -A "Reply-To: [email protected]" -I "From: [email protected]"; cat $HOME/reply.html) | $SENDMAIL -oi -t
已reply.html
正确传递并发送给发件人,但是我看不到 html 文件中定义的图像。我尝试过base64图像编码但没有成功,因为谷歌似乎跳过它们并显示丑陋的方块。
答案1
只要文件$HOME/reply.html
格式正确,您所拥有的应该可以工作。唉,根据你的描述,事实并非如此。
顺便说一句,我会尽可能多地将静态标头分解到该文件中,并且仅用于formail
前置无法提前计算的标头。这样你就只剩下
:0
| (formail -rA "$XLOOP" | grep .; cat $HOME/reply.html) | $SENDMAIL -oi -t
在 Procmail 配方中(如果XLOOP
标头实际上也是静态的,您也可以将其纳入模板中。这grep .
是因为formail
当它生成回复标头时,在标头和正文之间提供一个空行作为标头和正文之间的“颈部”,但我们在这里不希望这样,因为我们将在文件中提供额外的标头formail
,因此我们从输出中删除空行)。
诀窍是让不同的 MIME 部分正确地相互连接。这是一个模板。请注意,这根本不是一个 HTML 文件——它是一个 MIME 结构,其中包含 HTML 部分、图像部分和一些其他内容——因此您可能需要重命名它。
From: [email protected]
X-Reply-To: The reply-to: header is redundant if its value is the same as From:
MIME-Version: 1.0
Content-Type: multipart/related; boundary="reasonablyuniquegobbledygook"
--reasonablyuniquegobbledygook
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
This message is HTML-only because I hate you. Nothing personal, I hate
everyone.
--reasonablyuniquegobbledygook
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
<html><head><title>Reply</title></head><body><p>
I cannot think of a situation where you would genuinely want to base64
your HTML.
<img src=3D"cid:logo.png"></p></body></html>
--reasonablyuniquegobbledygook
Content-Type: image/png; name="logo.png"
Content-Transfer-Encoding: base64
Content-Id: <logo.png>
SGVyZSBpcyBzb21lIGJhc2U2NCBmb3IgeW91LiAgVGhpcyBpcyBvYnZpb3VzbHkgYWN0dWFsbHkg
dGV4dCwgbm90IGltYWdlL3BuZyBkYXRhLgo=
--reasonablyuniquegobbledygook--
请注意顶级 MIME 部分的结构multipart/related
,然后包含可以相互链接的各个 MIME 部分。 (这都是临时打印的,因此对于任何错误或疏忽表示歉意。)