首頁 >後端開發 >php教程 >关于给用户发送邮件的一些问题

关于给用户发送邮件的一些问题

WBOY
WBOY原創
2016-06-06 20:38:271080瀏覽

现在要给全部用户或者指定用户发送邮件,“发送”操作是由我们后台人员触发的。

发送操作提交后,我们就要给用户发送了,在发送过程中可能会存在一个问题,就是发送了一段时间后,程序因某些原因死掉了,这样就导致一些用户没有收到邮件,所以我的想法是发送前先把数据库里的用户全写入到一个文件中,发送时从文件中取用户,然后再弄个用户发送日志以记录哪些用户发送了,这样出问题后,可以从出问题的“那个地方”接着执行发送.....

不知道我的想法行不行,另外我担心“把数据库中的用户写入到文件中”这个过程所花费的时间会很长,从而导致性能上会存在隐患。谢谢大家讨论我的想法,给些意见或指点!

回复内容:

现在要给全部用户或者指定用户发送邮件,“发送”操作是由我们后台人员触发的。

发送操作提交后,我们就要给用户发送了,在发送过程中可能会存在一个问题,就是发送了一段时间后,程序因某些原因死掉了,这样就导致一些用户没有收到邮件,所以我的想法是发送前先把数据库里的用户全写入到一个文件中,发送时从文件中取用户,然后再弄个用户发送日志以记录哪些用户发送了,这样出问题后,可以从出问题的“那个地方”接着执行发送.....

不知道我的想法行不行,另外我担心“把数据库中的用户写入到文件中”这个过程所花费的时间会很长,从而导致性能上会存在隐患。谢谢大家讨论我的想法,给些意见或指点!

和@舞林 同学的想法有点相似:

  • 把待发的邮件,存储到列表(Lists)中,通过lpush插入到Redis消息队列中
  • 负责发送邮件的代码中通过BRPOP依次消息队列中的内容并进行处理,如果没有新邮件则会阻塞等待直到有新的消息

这样的话不管程序死掉或者什么原因都不会千万消息丢失,同时也可以不用另外加一个定时任务


相比于写文件或者是其它的方法,Redis是目前最合适的

Redis是一个开源、支持网络、基于内存、键值对存储数据库

参考:http://zh.wikipedia.org/zh/Redis

我的做法是邮件队列,放redis,crontab每分钟发送,脚本起来的时候发现上个脚本还在跑就退出,为了避免异常,脚本最多执行110秒。做好失败的监控,没啥问题。

还有什么呢,继续吧...

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn