linux下的邮件队列

md1*_*337 3 email linux postfix queue

我有一个缓慢的远程邮件中继服务器和一个 Web 应用程序,我在向该远程邮件服务器发送电子邮件时会锁定,直到发送电子邮件。发送电子邮件后,页面返回,应用程序再次启动。

所以我试图在应用程序服务器 (Linux) 上本地设置一个不同的邮件队列,以便应用程序使用它而不是远程邮件服务器。我的理由是电子邮件会在本地排队,直到它们被远程邮件服务器处理,但至少应用程序不会锁定。

我已经安装postfix并设置了远程邮件服务器的中继主机设置,但性能没有提高。似乎发生的事情是 postfix 只是实时转发我的 SMTP 指令,并没有真正将它们排队?

我能做什么?

Jde*_*eBP 5

问题不在于 Postfix。在您安装 Postfix 之前,您的应用程序直接将您的邮件提交到远程 SMTP 提交服务器,通过 Internet。您错过的步骤是重新配置您的应用程序。它仍然会发送到远程服务器。您需要告诉您的应用程序,也许是间接地,在本地提交邮件。

例如,如果它是一个 PHP 应用程序,则该mail()函数的行为由Unices 和 Linux 上的sendmail_path配置选项控制。它目前可能指向一个 shim 程序,该程序只是启动 SMTP 提交连接并将其标准输入泵送至该连接。您需要将其指向 Postfix 提交程序,sendmail, 。

这可能不是/usr/bin/sendmail因为您的 shim 程序在那里,并且很可能在/usr/bin/sendmail.postfix或类似的地方找到。确实,如果你有“替代品”系统/usr/bin/sendmail将是一个符号链接/etc/alternatives/mta-sendmail,它本身就是一个符号链接,你可能不得不重新定位后者。

无论通过何种方式,这涉及我们无法通过心灵感应来预测您的分发、应用程序和配置的详细信息,您都需要让您的应用程序调用正确的程序。简单地安装 Postfix 并没有做到这一点。

请注意,Postfix 与 Zmailer、MMDF 和 qmail 属于同一阵营。BillThor 在此处的另一个答案中所写的是基于 Sendmail Think 的一个完整的红鲱鱼。Sendmail 和 exim 是庞大的单体程序,由于它们的架构方式,它们必须区分“快速和非排队”和“慢速和排队”模式。要么提交程序转变为传输代理,并且在规范化、路由和传输(或尝试)消息之前不会退出,这对您来说将是很长时间;或者提交程序总是将邮件转储到队列中,在队列中等待队列运行器进程唤醒,将它延迟队列运行器的轮询间隔(通常为几分钟或几小时)。

Postfix 和 qmail 跟随 MMDF 的脚步,根据 Unix 哲学,多个独立的小程序各自做一项工作。邮件始终存放在队列中。 队列中注入程序(postdrop在后缀的情况下)触发某种(的信号这是一个在qmail的命名管道。)唤醒队列处理后台驻留程序(预处理守护进程pickup,在后缀的情况下),立即。借用并稍微修改一下 Dan Bernstein 的引用

其他 MTA 提供了一系列交付模式,从快速+不安全到慢速+排队。qmail 和 Postfix 中的队列守护进程会被队列中的新项目立即触发,因此系统只有一种交付模式:快速+排队。

这正是您想要的。您希望sendmail程序快速终止,使您的应用程序(正在等待它终止)继续,并且队列处理立即开始,但并行。Postfix、qmail、nullmailer等都会给你这个。您需要修复您的应用程序即可调用正确的提交代理。