【问题标题】:Django send_mail function keeps failingDjango send_mail 功能不断失败
【发布时间】:2012-10-21 06:09:29
【问题描述】:

一旦用户输入他的电子邮件,我一直试图让 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))
        

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    这意味着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 来实现的。

    【讨论】:

    • 我试过了,但我得到一个 TypeError: 'Invite' object is not iterable。即使我选择这样做: Invite.objects.latest('email_address') 我仍然会得到同样的错误。如何使列表可迭代?
    • @picmon 两件事。首先,您可能忘记在invite 周围添加[ ]。其次,我弄错了,应该是[invite.email_address]而不是[invite]。在旁注中,使用 .latest 会使您面临竞争条件,您应该避免它。
    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 2017-02-07
    • 1970-01-01
    • 2022-06-14
    • 2021-10-05
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多