Postfix 损坏队列:如何处理它

Postfix 损坏队列:如何处理它

Postfix 服务器有时会将邮件放入损坏的队列中。这些邮件从未被检查过,因为文件中有错误(我看到“邮件内容中的错误记录类型:43”)。在文档中,我可以看到“不可读或损坏的队列文件被移到这里进行检查”。

好的。我可以用 postcat 读取它们,但之后我该怎么办?我可以删除它们而不会出现错误吗?我该怎么做才能将它们放回发送队列?我找到了将文件移动到 maildrop 的地方,但什么也没发生。

谢谢 !

答案1

这是一个非常奇怪的行为,我从来没有见过 Postfix 这样做,要么你有一个非常旧的 Postfix,要么你在某个地方遇到了某种硬件问题,比如内存损坏或硬盘损坏。

要将您的电子邮件放回队列,最简单的方法是使用postcat和一些awk,例如(但YMMV):

postcat -q <m-id>  |
awk 'BEGIN {data=0}
     /^*** HEADER EXTRACTED/ {data=0;print "."; print "quit"}
     data==1 {if ($0 == ".") { $0 = ".."}; print}
     /^*** MESSAGE CONTENTS/ {data=1; print "DATA"}
     data==0 && /^sender:/ {print "HELO myfqdn\nMAIL FROM: " $2}
     data==0 && /^original_recipient: / {print "RCPT TO: " $2}' |
sendmail -bs

答案2

我用 vim 手动编辑了错误的消息,结果却收到了损坏的消息。为了解决这个问题,我不得不使用十六进制编辑器编辑文件奥克特塔。简而言之,消息的第一行包含 5 个 ascii 值。第一个和最后一个值是消息长度,第二个值是信封长度。不确定其他值。

每条记录前面都有一个 1 字节的记录类型和一个 1 字节的记录长度。这两个值都是二进制的,需要使用十六进制编辑器根据需要进行更改。

您可以使用 postcat 上的各种选项来检测是否存在任何错误。

    postcat <msgid>
    postcat -b <msgid>
    postcat -e <msgid>
    postcat -v <msgid>

要重新发送该消息,我必须在“MAIL FROM:”之前立即添加“HELO myfqdn\n”

答案3

您能提供 Postfix 版本号吗?这是哪个发行版?

(但这很可能表明存在硬件问题。)

编辑:那么是文件系统损坏和/或内存问题。尝试运行 memtest。

相关内容