2012-10-20 30 views
0

我一直在试图让django在用户输入他的电子邮件时发送邮件给一个用户,但它一直失败。例如,用户A向我的列表和django注册发送邮件。用户B注册我的列表和Django发送用户A和B的邮件。Django的send_mail函数一直在失败

我不想要那种过程,我想在每个用户填写他们的电子邮件地址后发送邮件给每个用户。因此,当另一个用户注册django不会将当前用户和已经在数据库中的用户发送相同的邮件。

下面是我的代码:

发送邀请

Subject='Join Me' 

message=loader.get_template('letter.txt') 

from_email='[email protected]' 


def invite_me(request): 
    if request.method=="POST": 
     form=InviteForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      #get input data and send email to the user. 
      send_mail(Subject,message.render(Context()),from_email,Invite.objects.values_list('email_address', flat=True)) 
      return HttpResponse('Thanks For Inputting Your Email, Go Check Your Inbox!') 
     else: 
      return HttpResponse('Invalid Email Address') 
     else: 
      form=InviteForm() 
      return render_to_response('home.html',{'InviteForm':InviteForm},context_instance=RequestContext(request)) 

回答

0

您正在使用:Invite.objects.values_list('email_address', flat=True),它返回所有email_address领域的所有Invite在你的数据库中的表。

这意味着all的注册Invite的将收到一封电子邮件。 我假设InviteFormModelForm为你Invite对象。 ModelForm.save返回新创建的对象,所以你应该做的:

invite = form.save() 
send_mail(Subject,message.render(Context()),from_email,[invite.email_address]) 

记住send_mail预计可迭代的,所以使用列表这里是必需的,这是通过使用[invite.email_address],而不仅仅是invite.email_address实现。

+0

我试过了,但我得到一个TypeError:'Invite'对象不可迭代。即使我选择这样做:Invite.objects.latest('email_address')我仍然会得到相同的错误。我如何使列表可迭代? – picomon

+0

@picpic两件事。首先,你可能忘了在'invite'周围添加'['']'。其次,我犯了一个错误,它应该是'[invite.email_address]'而不是'[invite]'。在旁注中,使用'.latest'会使你暴露于竞争条件,你应该避免它。 –

+0

非常感谢!你摇滚。 :) – picomon