使用 procmail 解密傳入的 pgp 郵件

使用 procmail 解密傳入的 pgp 郵件

目前我有一個正在運行的 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 }

...方括號之間的空白應該是空格和製表符。

相關內容