当用户注册到我的网站时,从我的服务器到我们的第三方SMTP提供商的连接非常糟糕,应用程序需要几秒钟到几分钟才能连接。 当它试图连接和发送时,用户被迫在那里等待,有时他们会放弃并离开网站。
这是可怕的用户体验。 什么是使这看起来是瞬间的好方法(不得不托pipe我们自己的邮件服务器在这一点上是不是一个选项)? 一些方法来执行这个在后台? 也许使用某种types的排队机制?
我在CentOS 5 x64机器上使用LNAMP堆栈。 应用程序正在使用CodeIgniter。
编辑:
看来使用本地邮件服务器作为中继是一个常见的解决scheme。 但是,如何使用这种方法logging或追踪电子邮件是否正确传递?
旁注:一些ESP为电子邮件传递提供了一个REST API(我们也是这样做的)。 我们目前使用SMTP而不是他们的REST API。
您可以使用Postfix作为一个nullmailer(仅中继到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
运行一个本地的sendmail / qmail / postfix – 无论如何,将smtp服务器设置为localhost。 当它可以(当下或在下一个队列运行)时,本地MTA将排队和交付。
在你的系统上:
# yum -y install sendmail # chkconfig sendmail on # service sendmail start
shoudl够了。
我知道CodeIgniter的bubke,所以我不能帮你。
不知道这是多么普遍(良好做法),但发送电子邮件是一个典型的asynchronous过程。 一个可能需要几秒钟甚至更长的时间。 这使得它成为使用消息队列的理想select。
交付方式是次要的,但SendGrid(用于交易电子邮件 – 忘记密码,发票等)或MailChimp(用于通讯和市场营销)等第三方供应商提供了良好的价值并被certificate是可靠的。
通过消息传递队列,我的意思是RabbitMQ(AMQ),ZeroMQ,Gearman,AWS SQS等。这些可以用于应用程序之间的任何types的信息交换。 在这种情况下,这是某些电子邮件需要发送的信息。
就交付信息而言,这可以通过具有这样的提供者的API或通过callback的更昂贵的计划来获得。