如何限制后缀发送到某些域的电子邮件的数量,并通过使用邮件头控制它?

目标

我正在寻找一种解决scheme,以小时为单位限制发送给特定电子邮件运营商(几个顶级域名,我所知道的所有这些域名)的电子邮件的速率。 我还需要一些方法来控制每封邮件的速度,以便在每个小时内允许由postfix发送更多的电子邮件。 此操作员维护的所有地址的限制是全局的,重置每个整小时。

我到目前为止所做的

我使用后缀after_queue自定义filter,寻找我们的自定义标题指示优先。 filter接受的邮件数量保存在PostgreSQL数据库的脚本之外。 符合当前时间范围配额的邮件将作为接受传递给后缀,超出配额的邮件将使用tempfail返回码延迟。

用于向此特定运营商发送电子邮件的SMTP中继是单独的虚拟机,仅用于有限的电子邮件和运营商的popup。 根据要求定制filter效率是足够好的。

问题

基本上有两个问题:

  1. 我找不到在postfix队列中设置电子邮件优先级的方法。 如果我可以使用我们的自定义标题作为优先级指标,或者给电子邮件添加另一个优先级标记,并保证它将在非优先级消息之前被过滤和发送,那将是更可取的。 我想过使用多个实例(postmulti),但优先级必须是相对的,数字 – 这些用作外联邮件的配额修改器。 基本上:优先级为N的电子邮件使用电子邮件使用的1 / N配额,没有优先权。 优先级是很好的function,所以如果时间片配额正常工作,我们可以不用它。
  2. 由于电子邮件在应用filter后会返回队列,我们​​不能保证电子邮件将在接受的时间范围内真正发送。 后缀队列似乎不可能引导和控制实际吞吐量。

我的解决scheme的想法

从队列后自定义filter,而不是将消息返回到后缀队列,只需使用其他工具直接发送到目标SMTP并完全跳过后缀。 我不知道在Linux上是否有任何准备使用的smtp客户端来实现这样的任务。 另外,我们需要同步处理反弹消息(作为SMTP通信中的响应)和asynchronous(作为发送到返回path地址的状态电子邮件)。 我们还需要控制这种工具的Return-Path指向服务器发送的电子邮件。

作为最后的机会解决scheme,想法是推出自己的SMTP服务器,或者修改sendmail / postfix源码来满足我们的需求。 这是矫枉过正,直到没有其他选项可用。

什么Linux工具可以立即(不排队)中继电子邮件到收件人的SMTP服务器,并提供有效的退回消息? 或者,如果这个问题有更好的解决方法,我应该看什么工具?

什么Linux工具可以立即(不排队)中继电子邮件到收件人的SMTP服务器,并提供有效的退回消息? 或者,如果这个问题有更好的解决方法,我应该看什么工具?

后缀本身具有MULTIPLE INSTANCEfunction。 它可以让你定义具有自己的队列和configuration文件的单独的postfix实例。 您可以将此实例用作SMTP处理的最后一个链。 是的,因为它有单独的队列,这个特殊的实例可以发送你的电子邮件,而无需等待和修改另一个队列。

看看后缀的策略守护进程。 这个配额按照你描述的方式工作。

https://www.policyd.org/content/features

http://wiki.policyd.org/quotas

http://signalboxes.net/howto/policyd/

要确定给定邮件消息的传送优先级,您可以定期grep延迟队列中的项目来读取您的自定义标头,并构build一个现在需要传送的消息列表。 对于该列表中的每个待处理邮件,请运行以下命令。

postqueue -i queueid

这应该会导致postfix尝试传递给定的queueid的邮件。

根据邮件的数量和系统的性能,这可能也可能不实际。 但是,您需要考虑系统的增长并testing系统需要处理的最大吞吐量。

注意。 在Centos上,延迟的邮件内容存储在以下目录下。

在/ var /线轴/后缀/延期