Django send_mail函数不断失败

时间:2012-10-20 16:59:03

标签: python django

我一直试图让django在用户输入他的电子邮件后向一个用户发送邮件,但它仍然失败。例如,用户A注册到我的列表并且django向他发送了一封邮件。用户B注册到我的列表,django向用户A和B发送邮件。

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

以下是我的代码:

发送邀请

Subject='Join Me'

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

from_email='test@testing.com'


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))

1 个答案:

答案 0 :(得分:0)

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

这意味着all已注册的Invite会收到一封电子邮件。 我认为InviteForm对于ModelForm对象来说是InviteModelForm.save返回新创建的对象,因此您应该这样做:

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

请注意,send_mail需要一个可迭代,因此需要使用此处的列表,这是通过使用[invite.email_address]而不仅仅是invite.email_address实现的。