通过php和codeigniter批量发送电子邮件

3
我正在编写一个脚本,用于用户注册。注册后会发送一封电子邮件给用户以进行电子邮件验证。当用户验证电子邮件并登录时,用户在网站上进行各种活动时,会向与用户互动的其他用户自动发送电子邮件。
例如,当用户在网站上向他的关注者发送私人消息时,也会向关注者的电子邮件地址发送自动化电子邮件,通知他用户的活动。
现在考虑到网站上有大约一千个用户,每天执行2000到5000次发送自动邮件的活动。
我正在使用codeigniter构建我的网站,并希望了解最佳方法,以便设计系统,使电子邮件能够正确传递,不会出现失败。

下次尝试更好地格式化您的文本,这样当它只是一坨文本时,阅读起来会更加困难 :) - rzetterberg
4个回答

3
似乎需要使用事件/消息队列来解决这个问题。
Web生成的事件 - 注册,直接向关注者发送消息等 - 将消息/任务/项目添加到工作/消息队列中。cron进程消耗队列,实际执行发送操作。请注意,“消息”在这里只是包含足够执行分配任务的信息的对象或数据库记录:从发送方/用户Y发送类型为X的消息给接收方/用户Z等。它甚至可以具有当前状态的审计字段,在将项目添加到队列时,完成时等。也许在一段时间后,队列会清除已完成的任务。
好处是,您的Web进程 - 注册等 - 不会等待这些消息发出,因此在浏览器端等待的客户端获得更快的Web响应。
缺点是,Web进程无法确定任务是否已执行;它所知道的只是请求已传递到队列以进行最终处理。
不过,您可以向用户提供Web界面来报告待处理/正在完成的请求的状态,这可能已经足够了。
只是随便想想...;-)

1

我建议您使用像postageapp等第三方服务。

发送电子邮件很麻烦,尤其是在尝试发送大量电子邮件时难以做到正确。

我建议使用postageapp,因为我已经使用过他们的服务,质量不错,并且他们有一个CodeIgniter库!


1

我会将所有消息添加到数据库中,并让cronjob每X分钟发送这些电子邮件。您可以一次发送所有电子邮件,或者每X分钟发送X条消息。为确保注册电子邮件被首先发送,您可以设置某种优先级。它们获得更高的优先级并首先发送。

如果您想创建某种类型的论坛,建议您仅在主题有新回复时向用户发送一封邮件,直到用户查看该主题为止。这可以确保您的流量较少且用户不会被垃圾邮件轰炸。不确定您的网站是否具有此类功能,但如果您有此类功能,这只是一个提示。


1

你需要采取两个步骤:

a)将用户活动日志保存在数据库中,然后使用cron向用户发送电子邮件。如果您不使用cron,则会对系统产生相当大的影响。

b)在使用cron发送电子邮件时,您应该使用第三方电子邮件解决方案,如Mandrill或Sendgrid。否则,如果您发送太多电子邮件,则可能会被标记为垃圾邮件(请记住这两个服务都不是免费的,但您可以创建开发人员版本来测试功能)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接