我刚刚设置了自己的 Exim SMTP 服务器来发送电子邮件
但是,当我发送新闻通讯时,我遇到了一些奇怪的事情。很多时候,当我通过 Exim 发送时,邮件在实际发送后会延迟长达一小时才能送达??
假设我发送了一封邮件09:41
。邮件已发送,但收件人已在10:25
……收到邮件,但邮件上的时间戳仍09:41
这是为什么??
发送邮件时,它们都通过同一个“保持活动” SMTP(TCP)连接发送(几分钟内发送了约 1000 封邮件)
那么很多人将看不到我的邮件,因为它最终会介于旧邮件和已读邮件之间,因为当邮件到达收件箱时,时间戳已经超过一个小时了
日志
2019-10-16 09:41:21 1iKdvt-0002cc-8A <= [email protected] H=smtp.example.com (example.com) [2a01:4f8:140:43a1::2] P=esmtpsa X=TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=no A=plain_server:example S=6921 [email protected]
2019-10-16 09:41:21 1iKdvt-0002cc-8A no immediate delivery: more than 10 messages received in one connection
如何立即发送电子邮件而不是将其放入队列中?
答案1
邮件将首先进入队列。这很合理,实际上需要它(例如,您不想因为灰名单而阻止整个线程,直到您可以发送消息)。
您可以做的是更改配置,以便立即读取这些消息的队列。添加(或更改现有值):
smtp_accept_queue_per_connection=20
这将为每个连接排队(并尽快发送)最多 20 条消息。目前您的限制是 10 条。
答案2
你的问题不是本地队列。你的问题在于系统上两次队列运行之间的设置时间。
Exim 作为 MTA,并没有真正好的队列管理;它只是在每次运行时尽可能多地发送消息,仅此而已。
查看Exim在进程列表中运行时使用的参数,如果是例如这样的:
进出口-q30m
意思是每半小时自动运行一次队列。有些发行版可能不使用此参数,而是将其放入 cron 作业中。