Mandrill用django mailsnake发送重复的电子邮件

时间:2013-05-29 05:59:44

标签: python django multithreading email apscheduler

我有一个每小时用apscheduler运行的功能,这可以验证一些条件,并根据此信息发送电子邮件到电子邮件

from mailsnake import MailSnake
mapi = MailSnake('XXXXXXXX', api='mandrill')
def functionEverHour():
     users=Users.objects.all()
     for users in users:
         if users.notificated==False:
             mapi.messages.send(message={'html':'sending emails', 'subject':'test', 'from_email':'tes@test.com', 'from_name':'example', 'to':[{'email':str(users.email)}]})

也许把这一行(mapi = MailSnake('Xajnas12sjnjas',api ='mandrill'))放在循环中避免那种错误?

究竟mapi = MailSnake('Xajnas12sjnjas'api ='mandrill')打开与mandrill的连接并且永不关闭,这就是我发送重复电子邮件的原因(是累积的吗?)?

由于

1 个答案:

答案 0 :(得分:0)

这可能是或不是错误,但为什么你在用户中做用户?它可能不会导致错误,但在我看来命名并不是最好的。我的建议是在all_users中使用命名:all_users = User.objects.all()和users_to_notify:

不确定为什么要使用MailSnake,但这是mandrill的API处理得非常好。

这是我关于如何更改代码的建议。有一点是你的方法做得太多了。它正在处理查找用户通知以及发送电子邮件的逻辑。最好的做法是让函数和对象等只处理一种责任。

def get_users_to_notify():
    all_users=Users.objects.all() 
    users_to_notify = []
    for user in all_users:
        if user.notified==False:
            users_to_notify.append(user)
    return users_to_notify

def functionEverHour():
    users = get_users_to_notify()
    for user in user:
        mapi.messages.send(message={'html':'sending emails', 'subject':'test', 'from_email':'tes@test.com', 'from_name':'example', 'to':[{'email':str(users.email)}]})