排队的消息可以在 Postfix 服务器之间移动吗?

排队的消息可以在 Postfix 服务器之间移动吗?

我的情况是,我有一台用于密钥签名的隔离机器。我得到了一些代码,这些代码可以生成电子邮件,供个人接收他们签名的密钥,但我想让这台机器脱离任何网络。我在这台机器上设置了 Postfix,将所有电子邮件放入保留队列。现在,我正试图找出一种方法,将这些电子邮件注入到我的联网服务器上,并使用正确设置的 Postfix 来传递邮件。我尝试将电子邮件移动到保留目录并使用 将它们排队sudo postsuper -r ALL。它说这些消息已排队,但从未被送达。有人成功做到这一点吗?

答案1

如果其他人有这个问题,我最终通过使用postcat将所有排队的电子邮件转储到单独的文件中,将它们复制到新服务器并使用将它们注入 Postfix 来实现我的目标sendmail -t。该-t标志指示 sendmail 使用文件中的标题,而不是将发件人和收件人指定为命令行参数。

答案2

我能够用一个命令完成所有这些操作,并通过 ssh 将消息直接发送到另一台服务器。我还编辑了该From字段,将其设置为来自以下字段的字段msg_id_in_queue(否则,从环境变量中获取):

postcat -bhq <msg_id_in_queue> | ssh user@server2 "sendmail -t -f [email protected]"

这可以通过使用正则表达式From直接从原始消息中提取字段并删除msg_id_in_queue其后的内容来改进,但对于我需要的用途来说,这就足够了。

答案3

您可以在传输文件中设置/etc/postfix/transport如下行:

* smtp:[new_server_dns_or_ip]

然后做:

postmap /etc/postfix/transport

然后进行postfix reload加载更改。

然后使用以下命令刷新队列:

postqueue -f

如果您没有*设置域名,则只有发往该域的邮件才会被重定向到新服务器。

答案4

我有一个死机的服务器,但其中仍有邮件/var/spool/postfix/{maildrop,defer,deferred}/。我只需将文件复制到正常运行的服务器上的正确位置即可。方法如下:

  • 将包含 /var 的磁盘从死机服务器移至工作服务器,然后挂载它。在此示例中,/var 是一个单独的分区,它挂载在/mnt/old_var/

  • 设置文件正确的权限(如果 UID 不同):

chown -R postfix:postdrop /mnt/old_var/spool/postfix/maildrop
chown -R postfix:postfix /mnt/old_var/spool/postfix/defer*
  • 移动 maildrop 文件

mv /mnt/old_var/spool/postfix/maildrop/* /var/spool/postfix/maildrop/

  • 移动延期文件
cd /mnt/old_var/spool/postfix/
查找延迟-type f-printf“%P \ n” \
| 读取 f 时;执行
    对于 d 在 defer 中延迟;做
      mv -v $d/$f /var/spool/postfix/$d/$f
    完毕
完毕

或者将最后一个命令作为一行:

cd /mnt/old_var/spool/postfix/; find defer -type f -printf "%P\n" | while read f; do for d in defer deferred; do mv -v $d/$f /var/spool/postfix/$d/$f; done; done

相关内容