我需要通过 SMTP 中继延迟邮件传送。
即
在时间 T 成功收到邮件消息。 在时间 T+4 小时将消息转发到目的地。
这在 sendmail 或任何其他 SMTP 中继中可能吗?
部署平台是IBM AIX。
最佳答案
您的问题至少应该更具体一些。无论如何我都会提出一些建议。
如果您只想每四个小时发送一次邮件,则必须以仅队列模式(QUEUE_MODE="cron";在 sendmail.conf 中)运行 sendmail,并将队列设置为每四个小时运行一次(QUEUE_INTERVAL= “4小时”;)。我认为,这只适用于类似 debian 的系统,但原理在任何地方都是一样的 - 你将队列模式设置为 cron (这实际上是由你启动 sendmail 的参数控制的),然后你定期处理它。
如果您只想延迟邮件递送,还有多种方法可以实现,具体取决于您想要这样做的原因。一种流行的解决方案是灰名单,它只执行以下操作 - 当主机连接到您的 MTA(sendmail,例如)时,它会被退回,并提示在某个时间间隔内重试。正确配置的邮件程序只会这样做 - 它会尝试再次发送邮件,最终消息将被接受并传递(或转发)。另一方面,大多数垃圾邮件机器人在收到错误后不会尝试重新发送消息。如果您需要 sendmail 上的灰名单,您可以在此处阅读:http://www.greylisting.org/implementations/sendmail.shtml
希望这至少有一点帮助。
编辑:
好的,所以现在我明白你需要做什么。这是使用 sendmail 的可能解决方案(我多年来一直以这种或另一种方式处理 sendmail,所以..:P):您使用其中两个。
第一个只是接收邮件并将其排队,并且(这很重要)它不会处理队列。第二个 sendmail 实例运行一个单独的队列,其 QUEUE_MODE 设置为 daemon 或 cron(例如,每分钟)。现在您需要做的就是编写一个外部脚本,一旦达到消息的“年龄”,就会将邮件从第一个队列移动到第二个队列。由于队列项只是文件,因此这是一项简单的任务,只需几行(例如,perl)即可完成(天哪,shell 脚本也可以做到这一点)。将队列项目从一个队列移动到另一个队列就像将文件从一个目录移动到另一个目录一样简单。请注意,这种技术广泛应用于邮件处理解决方案中,例如 spamassassin,所以它并不是我死去的头脑所想象的奇怪之处:P
希望这能给您一两个提示。
关于smtp - 如何通过 SMTP 中继(可能是 sendmail)延迟邮件传送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835743/