【问题标题】:Sending emails in bulk through php and codeigniter通过php和codeigniter批量发送邮件
【发布时间】:2011-10-02 05:19:13
【问题描述】:

我正在构建一个脚本,该脚本需要用户注册,并在注册后向用户发送电子邮件以进行电子邮件验证。现在,在用户登录时验证电子邮件后,当自动电子邮件发送给与用户在网站上交互的其他用户时,用户会执行各种活动。

例如,当用户在网站上向他的关注者发送私人消息时,还会向关注者的电子邮件地址发送一封自动电子邮件,通知他执行的用户活动。

现在考虑网站上有大约 1000 名用户,他们每天执行大约 2000 到 5000 次发送自动电子邮件的活动。

我正在使用codeigniter 建立我的网站,我想知道我可以设计系统的最佳方法,以便正确地发送电子邮件而不会失败。

【问题讨论】:

  • 下次尝试更好地格式化你的文本,当它只是一个文本时更难阅读:)

标签: php email codeigniter


【解决方案1】:

似乎是事件/消息队列的案例。

Web 生成的事件 - 注册、直接向关注者发送消息等 - 将消息/任务/项目添加到工作/消息队列中。一个 cron 进程消耗队列,实际执行发送。请注意,这里的“消息”只是一个对象或数据库记录,其中包含足以执行分配任务的信息:从发送者/用户 Y 向接收者/用户 Z 发送类型 X 的消息等。它甚至可以具有当前状态的审计字段,何时将项目添加到队列中,何时完成等。也许一段时间后队列会清除已完成的任务。

从好的方面来说,您的 Web 进程(注册等)不会等待这些消息发出,因此在浏览器端等待的客户端会获得更快的 Web 响应。

不利的一面是,Web 进程确实无法确定任务是否已执行;它所能知道的只是请求已被传递到队列以进行最终处理。

不过,您可以向用户提供 Web 界面来报告待处理/完成请求的状态,这可能就足够了。

只是大声思考...... ;-)

【讨论】:

    【解决方案2】:

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

    发送电子邮件很痛苦,而且很难做到正确,尤其是在尝试发送大量电子邮件时。

    我建议postageapp,因为我使用了他们的服务,而且他们有一个 CodeIgniter 库!

    【讨论】:

      【解决方案3】:

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

      如果你想做某种论坛,我建议你只在主题得到新回复时才发送一封邮件,直到用户查看了该主题。这可以确保您的流量更少,用户收到的垃圾邮件更少。不确定您的网站中是否有类似的功能,但如果您有类似的功能,这只是一个提示。

      【讨论】:

        【解决方案4】:

        你应该采取两个步骤:

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

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

        【讨论】:

          猜你喜欢
          • 2018-06-24
          • 2018-09-29
          • 1970-01-01
          • 2013-12-09
          • 2017-02-21
          • 2016-10-13
          • 1970-01-01
          • 2018-07-18
          • 1970-01-01
          相关资源
          最近更新 更多