用procmail解密传入的pgp邮件

目前我有一个正在运行的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 ,或者查找帮助gpgparsingMIME包装的封装或选项。

快速谷歌搜出了一个简单的Perl MIME包装它这样做:

如果环节不好,重新发明同一个轮子不应该是一个重大的挑战; 你基本上需要识别包含encryption有效负载的MIME部分,解码它(它可能是base64编码,除非它使用gpg自己的“ASCII装甲”),并将其传递给gpg 。 encryption的有效载荷的存在可能是一个好的触发器,但是也许包装器应该简单地通过任何不包含encryption的有效载荷的东西,并且将所有东西都送到包装器。

在切线方面,Procmail或您的规则中没有定义$subject 。 你可以做这样的事情:

 :0 * ^Subject:[ ]\/[^ ].* { subject=$MATCH } 

…方括号之间的空格应该是空格和制表符。