Postfix:更改排队消息中的发件人

Bre*_*bad 9 postfix queue

完全重新安装后,我们遇到了配置问题:发件人地址错误,一些收件人(邮件服务器)拒绝了他们。

所以有一堆邮件卡在 Postfix 队列中。

理想情况下,直接在排队的邮件中更改发件人地址,然后刷新队列将是最佳选择。

我尝试了这个解决这个问题的答案。但是在我拥有的版本 (2.11.0) 中,消息似乎不容易修改。

例如,没有/var/spool/mqueue目录,而是,/var/spool/postfix/...

active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr
Run Code Online (Sandbox Code Playgroud)

并且感兴趣的目录是deferred. 我试图修改那里的一些文件,用正确的域更改错误的域(并小心地确保只更改了那些域)。

但是随后,这些邮件被移至corrupt,这意味着简单的文本更改似乎不起作用(使用 完成vi)。

任何其他更简洁的方法来更改排队邮件中的发件人?

mas*_*oeh 20

我试过这个解决这个问题的答案。但是在我拥有的版本 (2.11.0) 中,消息似乎不容易修改。

例如,没有 /var/spool/mqueue 目录,而是 /var/spool/postfix/...

我想澄清两件事。

  • 首先,该答案适用于 sendmail 而不是 postfix。
  • 其次,根本不支持直接操作原始队列文件。

所以,你在这里有几个选择

1. smtp_generic_maps 参数

这个答案的灵感来自这个优秀的答案。它将自动将旧地址重写为新地址。您可以定义文件以将旧地址映射到新地址。

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    account@localdomain.example.com       account@example.com
Run Code Online (Sandbox Code Playgroud)

别忘了postmap /etc/postfix/genericpostfix reload

  • 好处:您不需要重新排队消息
  • 缺点: Postfix 将重写匹配的发件人和收件人地址account@localdomain.example.com

2.sender_canonical_address

为了克服第一个选项的缺点,您可以使用sender_canonical_maps. 此解决方案基于Postfix 作者建议。与第一个选项相同,您可以定义文件以将旧地址映射到新地址。

/etc/postfix/main.cf:
    sender_canonical_maps = hash:/etc/postfix/sender_canonical

/etc/postfix/sender_canonical:
    account@localdomain.example.com       account@example.com
Run Code Online (Sandbox Code Playgroud)

运行postmap /etc/postfix/sender_canonical然后运行postfix reload。由于后缀队列的流动,您必须使用命令重新排队受影响的队列postsuper -r queueid

  • 好处: Postfix 不会重写收件人地址。
  • 缺点:您必须重新排队所有受影响的消息。但是您可以使用单个命令重新排队所有延迟postsuper -r ALL deferred

3.直接操作postfix队列

这是手动修改队列以进行高级处理的旧方法。这个答案来自postfix-users 邮件列表

简而言之

有关上述命令的文档,请参阅此页面

注意:
来自postfix-users 邮件列表的原始解决方案,用于postcat -q queueid >tempfile提取队列。该命令将提取队列的头部、主体和元信息。正如下面指出的 Azendalesendmail由于元信息,将拒绝发送此格式错误的电子邮件。

-bh除了参数之外使用参数q将使 postcat 将输出过滤到标题和正文,不包括元信息。这样做的一个附带好处是临时文件采用大多数电子邮件客户端识别为 .eml 格式的格式,允许您查看生成的(编辑过的)消息。