当用户注册我的网站时,我的服务器与第三方 SMTP 提供商之间的连接非常差,应用程序需要几秒钟到几分钟才能连接。在尝试连接和发送时,用户被迫等待,有时他们会放弃并离开网站。
这真是糟糕的用户体验。有什么好办法可以让这一切看起来是即时的(目前还不能托管我们自己的邮件服务器)?有什么办法可以在后台执行吗?也许可以使用某种类型的排队机制?
我在 CentOS 5 x64 机器上使用 LNAMP 堆栈。应用程序正在使用 CodeIgniter。
编辑:
使用本地邮件服务器作为中继似乎是一种常见的解决方案。但是,如何记录或跟踪使用此方法是否正确发送了电子邮件?
旁注:一些 ESP 提供用于电子邮件传送的 REST API(我们的也提供)。我们目前使用 SMTP,而不是他们的 REST API。
答案1
您可以使用 Postfix 作为空邮件程序(仅中继到 ISP)。这只不过是四行代码:
main.cf
myorigin = $mydomain
relayhost = $mydomain
inet_interfaces = loopback-only
local_transport = error:local delivery is disabled
参考:http://www.postfix.org/STANDARD_CONFIGURATION_README.html#null_client
答案2
运行本地 sendmail/qmail/postfix - 无论如何,将 smtp 服务器设置为 localhost。本地 MTA 将在可以时排队并传送(立即或在下一次排队运行时)。
在您的系统上:
# yum -y install sendmail
# chkconfig sendmail on
# service sendmail start
就足够了。
我对 CodeIgniter 不太了解,所以我无法帮助你。
答案3
不确定它有多常见(良好做法),但发送电子邮件是一个典型的异步过程。这个过程可能需要几秒钟甚至更长时间。这使得它成为使用消息队列的完美候选者。
传递方式是次要的,但第三方提供商如 SendGrid(用于交易电子邮件 - 忘记密码、发票等)或 MailChimp(用于时事通讯和营销)提供了良好的价值并且已被证明是可靠的。
我所说的消息队列是指 RabbitMQ (AMQ)、ZeroMQ、Gearman、AWS SQS 等。它们可用于应用程序之间的任何类型的信息交换。在这种情况下,它是某封电子邮件需要发送的信息。
就交付信息而言,可以通过此类提供商的 API 获得,或通过回调获得更昂贵的计划。