sendmail 8.14.x
这个问题与sendmail 是否将所有内容以“单个文件”的形式发送到下游智能主机?但与特定问题相关的信息是分开呈现的。
我有一个具有以下设置的邮件环境:
Application Servers -> sendmail relay -> cloud email service -> internet
下游云服务要求将电子邮件以单个文件的形式智能托管到它们。如果它看到来自同一公共源 IP 的多个同时 SMTP 连接,它会接受一个并推迟其他连接,并出现 400 类错误。显然,这严重限制了出站吞吐量,我们正在与云提供商合作尝试解决此问题。不过,与此同时,我需要找到一种方法让 sendmail 在单个连接中发送所有内容。
乍一看,我认为这个confSINGLE_THREAD_DELIVERY
选项可能合适,但我仍然觉得如果队列运行器正在处理延迟消息,而新传入的连接想要立即发送某些消息,那么我会遇到问题。或者更糟的是——队列运行器正忙于处理大型队列,永远不会让任何新消息发送。
我知道这是一个愚蠢的要求,正如我提到的,我们正在与云提供商合作,但与此同时,是否有一个 sendmail 配置可以满足这个要求,同时平衡新消息和排队消息的传递?
答案1
你可以
- 使用
relay
邮件程序传送到智能主机(relay
默认使用) - 提高
relay
邮寄费用,避免“一次性”投递 - 使
relay
邮件程序使用自定义队列组及其更频繁的队列运行周期 - 如果上述方法有效,你可以考虑使用持久队列运行器来降低交付延迟
sendmail.mc
dnl Declare relay queue group with queue run period 10m
dnl Do not forget to create /var/spool/mqueue/relay directory
QUEUE_GROUP(`relay', `P=/var/spool/mqueue/relay I=10m')
dnl OPTIONAL: define minimum time BETWEEN delivery attempt of any message
define(`confMIN_QUEUE_AGE',`25m')dnl
dnl Make sendmail honor mailers' expensive flag
define(`confCON_EXPENSIVE',`True')dnl
dnl Add F=e "expensive" flag to relay mailer flags
define(`RELAY_MAILER_FLAGS',`e')dnl
dnl make relay mailer select custom queue group for relay mailer
define(`RELAY_MAILER_QGRP',`relay')dnl