我正在构建一个用户注册的脚本,并在注册时向用户发送电子邮件以进行电子邮件验证。现在,在用户登录时验证电子邮件时,当用户将自动电子邮件发送给用户在网站上与之交互的其他用户时,用户会执行各种活动。
例如,当用户向网站上的关注者发送私人消息时,也会向关注者电子邮件地址发送自动电子邮件,通知他所执行的用户活动。
现在考虑网站上有大约1000名用户,每天执行大约2000到5000次自动发送电子邮件的活动。
我正在使用codeigniter
建立我的网站,我想知道我可以设计系统的最佳方法,以便正确地传送电子邮件。
答案 0 :(得分:3)
似乎是一个事件/消息队列的案例。
Web生成的事件 - 注册,直接向关注者发送消息等 - 将消息/任务/项添加到工作/消息队列中。 cron进程占用队列,实际执行发送。请注意,此处的“消息”只是包含足以执行分配任务的信息的对象或数据库记录:从发件人/用户Y向收件人/用户Z等发送类型X的消息。它甚至可以具有当前状态的审计字段,当项目被添加到队列,完成时等等。也许队列在一段时间后被清除完成的任务。
从好的方面来说,您的网络流程 - 注册等 - 并没有等待这些消息消失,因此在浏览器端等待的客户端会得到更快的网络响应。
缺点是,网络流程确实无法确定任务是否已执行;它可以知道的是,请求已被传递到最终处理的队列。
但是,您可以向用户提供报告待处理/完成请求状态的Web界面,这可能就足够了。
大声思考......; - )
答案 1 :(得分:1)
我建议您使用第三方服务,例如postageapp和其他服务。
发送电子邮件既痛苦又难以做到,特别是在尝试发送大量电子邮件时。
我建议postageapp因为我使用了他们的服务,这是好的,他们有一个CodeIgniter库!
答案 2 :(得分:1)
我会将所有消息添加到数据库中,让cronjob每隔X分钟发送一次这些电子邮件。您可以立即发送所有电子邮件,也可以每隔X分钟发送一条X消息。为确保首先发送注册电子邮件,您可以设置某种优先级。他们获得更高的优先级,并将首先发送。
如果您想创建某种论坛,我建议您仅在主题获得新回复时发送一封邮件,直到用户查看该主题为止。这可以确保您减少流量并减少垃圾邮件。不确定你的网站上是否有类似这样的功能,但如果你有类似的话,这只是一个提示。
答案 3 :(得分:1)
你应该采取两个步骤:
a)将用户活动日志保存在数据库中,然后使用cron向用户发送电子邮件,如果你不使用cron那么它会对你的系统产生很大的影响。
b)在使用cron发送电子邮件时,您应该使用第三方电子邮件解决方案,如Mandrill或Sendgrid,否则如果您发送的电子邮件太多,那么您的电子邮件可能会被标记为垃圾邮件(请记住,这两种服务都不是免费的,但您可以创建开发人员版本测试功能)