我尝试了解决这个问题的答案。但是在我所拥有的版本(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
别忘了postmap /etc/postfix/generic
跑步postfix 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
先跑postmap /etc/postfix/sender_canonical
再跑postfix reload
。由于后缀队列的流动,您必须使用命令重新排队受影响的队列postsuper -r queueid
- 好处: Postfix不重写收件人地址。
- 缺点:您必须重新排队所有受影响的消息。但是您可以使用单个命令重新排队所有延迟的
postsuper -r ALL deferred
3.直接处理后缀队列
这是修改队列以进行高级处理的手动旧方法。这个答案来自postfix-users邮件列表
简而言之
有关上述命令的文档,请参阅此页面
注意:
来自postfix-users邮件列表的原始解决方案,用于postcat -q queueid >tempfile
提取队列。此命令将提取队列的标头,正文和元信息。如下面的Azendale所指出,sendmail
由于元信息,它将拒绝发送此格式错误的电子邮件。
-bh
除了参数外,还使用参数q
将使postcat过滤器仅将输出过滤到标头和正文,不包括元信息。这样做的一个附带好处是,临时文件的格式大多数电子邮件客户端都将其识别为.eml格式,从而使您可以查看生成的(编辑后的)邮件。
postcat -qbh queueid >tempfile
。(好处是:它是.eml格式。)如果我刚使用-q
它,则在运行sendmail时似乎什么也没做。Postfix版本2.8.4。有人可以确认吗?如果是这样,让我们编辑此答案。