4

我正在开发一个网站,在某些事件/用户操作(在照片中标记、添加为朋友等)之后向用户发送电子邮件通知

根据我的经验,从 Web 服务器发送电子邮件可能会很慢。例如,在创建新用户时,我将发送一封电子邮件以确认/欢迎该帐户。但是,有时会在页面完成发送电子邮件时等待页面加载的短暂暂停。

我担心的是,如果我在连接到邮件服务器时遇到问题或邮件服务器超载,它将成为我的应用程序/页面加载的瓶颈

所以我的问题是,从一致发送电子邮件的 Web 应用程序发送电子邮件的最佳方式是什么?

我是否应该通过将电子邮件内容存储在数据库中来创建队列系统,然后运行预定的 cron 作业来处理所有未送达的电子邮件?

还是应该在用户完成操作/事件(创建会员帐户、在照片中添加标签等)后直接发送电子邮件?

4

5 回答 5

3

不可以。请您的系统管理员配置邮件服务器。正确配置的邮件服务器应该比在数据库中存储消息更快。

使用本地发送来避免网络延迟。[邮件功能] sendmail_path = /usr/sbin/sendmail in php.ini

即使邮件服务器关闭(邮件将排队),它也可以工作。

于 2011-02-02T18:34:48.727 回答
2

在本地机器上设置邮件中继。这样您就不必为邮件的 cron 和数据库存储而烦恼,但仍然可以防止每封邮件的即时网络流量开销。不利的一面是,您必须管理一个额外的守护进程,并且您必须确保不创建开放中继

于 2011-02-02T18:32:53.573 回答
0

是的,通过创建一个包含所有必要信息的 mysql 表来设置队列系统,并设置一个 cron 作业以每 x 分钟运行一次以从队列中选择电子邮件并发送它们(不要忘记LIMIT为您的 sql 查询设置一个获取要发送的电子邮件)。

于 2011-02-02T18:24:00.780 回答
0

你提到的数据库解决方案很好

简单的解决方案是发送邮件作为脚本的最终操作(发送 html 时),

或配置 php 以使用较少陷入困境的 smtp, http ://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm

问候,//t

于 2011-02-02T18:27:14.240 回答
0

正如您所说,您不会与您的网络请求/响应同步发送电子邮件 - 这是一个好主意,因为您不希望您的用户体验阻塞诸如连接到邮件服务器之类的事情。即使它是一个本地邮件服务器,让它异步并将两者解耦总是一个好主意。换句话说,您的邮件将被推送到类似机制的队列中并异步发送。

在这种情况下,将要发送的消息保存在数据库(或其他一些存储)中的优势 - 与内存队列相反 - 是在您的网络服务器出现故障时您有更多的可恢复性。您以后可以随时处理保留的电子邮件,但如果您将它们保存在内存中,那么您的网络服务器进程的任何故障都将意味着丢失排队的邮件。

于 2011-02-03T17:53:46.707 回答