向用户发送有关数据更改的每周电子邮件通知

时间:2015-03-11 16:43:52

标签: django django-email

在django项目中对数据进行任何更新或更改时,有哪些方法可以向用户发送自动每周电子邮件通知?

2 个答案:

答案 0 :(得分:3)

我将描述我所知道的最简单的解决方案。对于这个问题,还有许多更复杂的方法。

从根本上说,你需要三件事:

  1. 任务运行器(我建议使用 django-kronos 配置cron作业)
  2. SMTP提供商(我推荐 Mailgun super simple to set up with Django ,并为您提供开箱即用的测试积分。)
  3. 电子邮件模板(写自己和渲染到Django的字符串 - Mailgun在他们的博客上也有一些很好的开源模板)
  4. 示例:django-kronos 提供了用于将函数注册为cron作业的装饰器(假设您的Web服务器是基于Linux的)。可以从命令行将这些作业作为部署过程的一部分进行安装:

    ./manage.py installtasks
    

    要让kronos找到任务,它们必须位于您应用内的cron.py个文件中。

    # myapp/cron.py
    
    import kronos
    
    from django.contrib.auth.models import user
    
    from myapp.services import check_for_changes, notify_user_of_change
    
    
    # Register cron job to run once a week (every Sunday) at midnight
    @kronos.register('0 0 * * 0')
    def notify_about_changes():
        """Sets up a cron job and runs this service function once a day.
    
            Installed With:
               ``./manage.py installtasks``
        """
        all_my_users = User.objects.all()
        for user in all_my_users:
            changes = check_for_changes(user)
            for change in changes:
                notify_user_of_change(user, change)
    

    请注意,将任务功能尽可能保持“精简”是一种很好的做法。在您的情况下,您(a)检查更改,然后(b)通知每个更改。这些可以是一个接受用户实例作为参数的函数,或者它们可以是模型方法。无论如何,努力工作应该在其他地方处理。

答案 1 :(得分:0)

这是一个非常广泛的问题,不幸的是,答案也将是广泛的。您正在寻找的常规工作流程可能从Signal开始,您可以将其设置为在更新数据时激活。

然后,该信号将存储有关更改的数据,然后使用许多不同的电子邮件选项之一来发送电子邮件。您可以使用内置Django emails,也可以使用第三方API,例如django-mailchimp

希望这会让你朝着正确的方向前进。