我有一个每小时用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的连接并且永不关闭,这就是我发送重复电子邮件的原因(是累积的吗?)?
由于
答案 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)}]})