目前我有一个正在运行的Postfix服务器,通过procmail传递传入的邮件。 这工作正常,但现在我想解密任何传入的邮件,这是用pgp自动encryption。 所以我创build了一个procmail规则来触发gnupg。
这是我目前的.procmailrc:
:0 fw * ^Subject: encryptme | /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" [email protected]
现在邮件成功解密并发送到[email protected],但邮件主题为空(邮件只显示“ENCRYPTED:”),服务器的电子邮件地址为发件人。 当然,解密后的邮件包含电子邮件标题的一部分。
Content-Type: multipart/mixed; boundary="713bkotRlnRGA7FAhJANoI0IsDpX3ws8N" --713bkotRlnRGA7FAhJANoI0IsDpX3ws8N Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Just a test. --713bkotRlnRGA7FAhJANoI0IsDpX3ws8N--
有没有可能自动解密传入的邮件,并“干净”(只是解密的消息)没有像GNU Anubis的额外软件? procmail触发程序的一个很好的规则(涉及主题)?
我希望这些信息足以帮助别人。
用这么多的话来说, gpg --decrypt
一个文件,而不是电子邮件。 一封电子邮件通常由多个MIME部分组成(您的示例显示了一个multipart/mixed
仅与单个主体部分multipart/mixed
,但该概念仍然成立),这不是文件。 您只需将encryption的有效负载(不是MIME容器)传递给gpg
,或者查找帮助gpg
parsingMIME包装的封装或选项。
快速谷歌搜出了一个简单的Perl MIME包装它这样做:
如果环节不好,重新发明同一个轮子不应该是一个重大的挑战; 你基本上需要识别包含encryption有效负载的MIME部分,解码它(它可能是base64
编码,除非它使用gpg
自己的“ASCII装甲”),并将其传递给gpg
。 encryption的有效载荷的存在可能是一个好的触发器,但是也许包装器应该简单地通过任何不包含encryption的有效载荷的东西,并且将所有东西都送到包装器。
在切线方面,Procmail或您的规则中没有定义$subject
。 你可以做这样的事情:
:0 * ^Subject:[ ]\/[^ ].* { subject=$MATCH }
…方括号之间的空格应该是空格和制表符。