我正在使用一个简单的内容过滤器将邮件传递给 perl 脚本以使用 pgp 密钥进行加密。
Master.Cf
在 smtp 下
-o content_filter=mail_encrypt:dummy
然后
mail_encrypt unix - n n - - pipe
flags= user=gpgmap argv=/usr/sbin/gpgit.pl ${recipient}
Main.cf
content_filter = mail_encrypt
我正在使用 Mike Cardwell 编写的简单 perl 脚本,https://github.com/mikecardwell/gpgit
它“看起来”正在工作。我发送邮件,postfix 交给 mail_encrypt 并返回一条已成功发送的消息。
mail postfix/pipe[3149]: 3E87341017: to=<[email protected]>,relay=mail_encrypt,delay=1.6, delays=0.52/0.01/0/1.1, dsn=2.0.0, status=sent (delivered via mail_encrypt service)
但消息就是无处可去。我认为它没有被交还给 PF 进行传递,但我不知道现在该从哪里着手。
更新:我再次阅读了 content_filter rfc 并使用了高级内容过滤器。
scan unix - - n - 10 smtp
-o smtp_send_xforward_command=yes
-o disable_mime_output_conversion=yes
-o smtp_generic_maps=
localhost:10026 inet n n n - 10 spawn
user=gpgmap argv=/usr/sbin/gpgit.pl ${recipient} localhost 10027
localhost:10026 inet n - n - 10 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
-o smtpd_helo_restrictions=
# -o smtpd_client_restrictions=
# -o smtpd_sender_restrictions=
# Postfix 2.10 and later: specify empty smtpd_relay_restrictions.
# -o smtpd_relay_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
现在我收到了邮件。但是现在看起来它几乎跳过了 perl 脚本。
Aug 31 15:53:54 mail postfix/qmgr[3781]: 044944242D: from=<[email protected]>, size=1947, nrcpt=1 (queue active)
Aug 31 15:53:54 mail postfix/smtp[3799]: 84D3D42428: to=<[email protected]>, relay=localhost[127.0.0.1]:10026, delay=1, delays=0.55/0.01/0.04/0.4, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 044944242D)
Aug 31 15:53:54 mail postfix/smtpd[3800]: disconnect from localhost[127.0.0.1]
Aug 31 15:53:54 mail postfix/qmgr[3781]: 84D3D42428: removed
Aug 31 15:53:54 mail postfix/virtual[3802]: 044944242D: to=<[email protected]>, relay=virtual, delay=0.49, delays=0.4/0.05/0/0.04, dsn=2.0.0, status=sent (delivered to maildir)
答案1
在阅读了一些资料并与 postfix-users 列表中的一些人交流后,发现这种方式的进出管道实际上不受支持。Postfix 正在寻找 perl 脚本,并使用 sendmail 命令将其返回。
我已改用 gpg-mailgate 并且一切正常。