Procmail 不退回电子邮件

Procmail 不退回电子邮件

我有一个用于域名的万能电子邮件地址,但我想阻止某些地址接收邮件。以前,我是这样操作的:

:0
* ^(X-Original-To): [email protected]
/dev/null

这很好,但是,电子邮件被默默忽略了。我希望将退回邮件发回给发件人,以便他们知道邮件被拒绝了。我使用了类似的代码回答:

:0
* ^(X-Original-To): [email protected]
{ EXITCODE=67 HOST= }

但是,现在电子邮件正在投递,并且没有发送退回邮件。

答案1

除了您尝试中明显的拼写错误之外,如果我将食谱放在我的个人目录中,您的示例就可以起作用.procmailrc

下面是在 Ubuntu 上一个新的 Docker 容器中的一个快速演示,我在其中安装了 Postfix、Procmail 和 Netcat,并为自己创建了一个用户帐户:

tripleee@0934b6a257c9:~$ cat >.procmailrc
LOGFILE=/tmp/procmail.log

:0
* ^(X-Original-To): [email protected]
{ EXITCODE=67 HOST= }
^D
tripleee@0934b6a257c9:~$ nc localhost 25
220 0934b6a257c9 ESMTP Postfix (Ubuntu)
ehlo localhost
250-0934b6a257c9
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
mail from:<tripleee>
250 2.1.0 Ok
rcpt to:<tripleee>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
X-Original-To: [email protected]
Subject: first

who's on first
.
250 2.0.0 Ok: queued as 608C329A304
quit
221 2.0.0 Bye
^C
tripleee@0934b6a257c9:~$ cat /tmp/procmail.log 
From tripleee@0934b6a257c9  Fri Mar  4 11:50:59 2022
 Subject: first
  Folder:                                     0
From MAILER-DAEMON  Fri Mar  4 11:50:59 2022
 Subject: Undelivered Mail Returned to Sender
  Folder: /var/mail/tripleee                           2267

然而,同样的配方/etc/procmailrc无论如何都会传递消息;基本上,HOST=就是说跳过当前的配方文件,但在/etc/procmailrc,这意味着停止读取该文件并继续交付给用户。

我只能推测这就是您遇到的实际问题。如果您有更多详细信息,请编辑您的问题以提供它们。

顺便说一句,括号是多余的,并且点应该被转义。

:0
* ^X-Original-To: username@example\.com
{ EXITCODE=67 HOST= }

如果您启用详细日志记录,VERBOSE=yes您将看到 Procmail 实际上分配了,HOST=}这并不是我真正期望的,但它可以工作(只要您的HOST名称不是真正命名的}!)

还请注意日志文件显示传入的邮件被丢弃,然后向我发送了一封退回邮件(因为我既是发件人也是收件人)。但是,生成的退回邮件中包含的文本(模糊地)表明收件人地址确实存在:

<tripleee@0934b6a257c9> (expanded from <tripleee>): user unknown

您可能必须非常熟悉 Postfix 退回邮件才能准确理解这是什么意思;它基本上说它扩展tripleee为包含域名的完全扩展的电子邮件地址,然后向该地址发送邮件会在冒号右侧产生错误消息。(无论好坏,Sendmail 的退回邮件仍然更加晦涩难懂;但一如既往,难以理解的错误消息的真正优点是微软。)

相关内容