2012-10-20 28 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