所以我试图在应用程序服务器(Linux)上本地设置一个不同的邮件队列,以便应用程序使用它而不是远程邮件服务器.我的理由是,电子邮件将在本地排队,直到它们被远程邮件服务器处理,但至少应用程序不会锁定.
我已经安装了postfix并将relayhost设置设置为远程邮件服务器,但性能没有提高.似乎发生的事情是postfix只是实时转发我的SMTP指令而不是真正排队吗?
我能做什么?
解决方法
例如,如果它是PHP应用程序,那么mail()函数的行为由Unice和Linux上的sendmail_path
configuration option控制.它可能正在指向一个填充程序,该程序只是启动一个SMTP提交连接并在其上提供标准输入.您需要将此指向Postfix提交程序sendmail
.
这可能不是生活在/usr/bin/sendmail,因为你的垫片程序在那里,很可能在/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哲学,多个小型独立程序各执一个作业.邮件始终存入队列.但是队列注入程序(在Postfix的情况下为postdrop
)会立即触发某种形式的信号量(It’s a named pipe in qmail.)以唤醒队列处理守护进程(预处理守护进程,pickup
,在Postfix的情况下).借用并略微修改a quote from Dan Bernstein:
Other MTAs offer a spectrum of delivery modes,from fast+unsafe to slow+queued. The queue daemons in qmail and Postfix are instantly triggered by new items in the queue,so the system has just one delivery mode: fast+queued.
这正是你想要的.您希望sendmail程序快速终止,使您的应用程序(等待它终止)继续,并且队列处理立即启动,但并行. Postfix,qmail,nullmailer等都会给你这个.您只需要修复您的应用程序以调用正确的提交代理.