我一直试图让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))
答案 0 :(得分:0)
您正在使用:Invite.objects.values_list('email_address', flat=True)
,它会返回数据库中所有email_address
的所有Invite
字段的列表。
这意味着all
已注册的Invite
会收到一封电子邮件。
我认为InviteForm
对于ModelForm
对象来说是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
实现的。