我的情况是,我有一台用于密钥签名的隔离机器。我得到了一些代码,这些代码可以生成电子邮件,供个人接收他们签名的密钥,但我想让这台机器脱离任何网络。我在这台机器上设置了 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