在Django视图中是立即发送邀请邮件还是一次性发送?
我正在开发一个网页应用,里面有个功能是用户可以邀请朋友加入。用户发送的邀请会通过一个叫做Invitation
的模型存储在数据库里。用户可以一次发送多个邀请。
你觉得更合适的做法是什么呢?是在后台一次性发送所有的邮件,还是在post_save
中一个一个地发送?
一次发送一封邮件会不会对性能造成很大的影响呢?
1 个回答
6
如果这是一个实时应用程序,并且用户体验很重要,那么我建议你在保存后处理程序(post_save handlers)或者视图中避免发送任何与邮件相关的内容。
原因有很多:SMTP(邮件发送协议)可能会出现故障,网络连接可能会中断,网络虽然连接上了,但速度可能慢得像蜗牛等等。在这些情况下,要么你的程序会出错,要么用户会一直等待,这对业务来说都不好。
解决办法是写一个、买一个或者找到一个独立的邮件发送工具,这个工具能够温和地处理所有这些情况,遇到问题时能提醒管理员,能够灵活切换SMTP通道,还可以追踪邮件是否被退回等。
然后,在你的保存后处理程序中,你只需要添加类似这样的代码:
email_dispatcher.add_to_queue(my_email)
关于现成的解决方案,我快速浏览了一下code.google.com,发现了一个链接 http://code.google.com/p/django-mailer/,但我没有使用过,所以不能推荐。