目前我有一个正在运行的 Postfix 服务器,它通过 procmail 传递传入邮件。它工作正常,但现在我想自动解密任何使用 pgp 加密的传入邮件。因此我创建了一个 procmail 规则来触发 gnupg。
这是我当前的.procmailrc:
:0 fw
* ^Subject: encryptme
| /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" [email protected]
现在邮件已成功解密并发送至[电子邮件保护]但邮件主题为空(邮件仅显示“已加密:”),发件人为服务器的电子邮件地址。当然,解密的邮件包含部分邮件头。
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 触发程序(而不是主题)的良好规则是什么?
我希望这些信息足以帮助别人。
答案1
简而言之,gpg --decrypt
想要一个文件,而不是电子邮件消息。电子邮件消息通常由多个 MIME 部分组成(您的示例显示multipart/mixed
只有一个正文部分,但概念仍然成立),这些部分不是文件。您只需将加密的有效负载(而不是 MIME 容器)传递给,gpg
或者找到有助于gpg
解析 MIME 包装器的包装器或选项。
通过快速谷歌搜索找到了一个简单的 Perl MIME 包装器,它可以执行以下操作:
如果链接出现问题,重新发明同样的轮子应该不是什么大问题;您基本上需要识别包含加密有效负载的 MIME 部分,对其进行解码(base64
除非使用gpg
自己的“ASCII 装甲”,否则它可能已被编码),然后将其传递给gpg
。加密有效负载的存在可能是一个很好的触发器,但也许包装器应该简单地传递任何不包含加密有效负载的内容,然后您将所有内容都提供给包装器。
$subject
顺便说一下, Procmail 或规则中没有任何定义。您可以执行以下操作:
:0
* ^Subject:[ ]\/[^ ].*
{ subject=$MATCH }
...方括号之间的空白应该是一个空格和一个制表符。