0

我有一个使用 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 的连接并且从不关闭,这就是我重复发送电子邮件的原因(是累积的?)?

谢谢

4

1 回答 1

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)}]})
于 2013-09-23T23:37:33.230 回答