首页 > 解决方案 > Django send_mail“to_email”字段

问题描述

我无法to_email为收件人获取字段。

使用 Django 2.1 并在用户注册到某个页面后自动发送电子邮件。

现在发送的电子邮件reciever@gmail.com显然是不正确的。

它需要发送到表单中输入的任何电子邮件。

我已经尝试更改为to_email= request.POST['email']to_email = form.cleaned_data['email']但那些不起作用。

to_email = form.cleaned_data['email']给出错误

TypeError at /users/list "to" argument must be a list or tuple

然后将其更改为

to_email = form.cleaned_data['email',]

给出错误

KeyError at /users/list ('email',)

有人能帮我吗?

视图.py

def list_view(request):
    if request.method == 'POST':
        form = ListForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, f"signed up!")
            subject = "Yay."
            html_message = render_to_string('mail/mail_template.html', {'context': 'values'})
            plain_message = strip_tags(html_message)
            from_email = settings.EMAIL_HOST_USER
            to_email = ['receiver@gmail.com',]
            html_message.content_subtype = "html"
            send_mail( subject, plain_message, from_email, to_email, html_message=html_message )
            return redirect('landing')

表格.py

class ListForm(forms.ModelForm):
    email = forms.EmailField(required=True)


class Meta:
    model = List
    fields = ['email']

标签: djangodjango-formsdjango-views

解决方案


该错误会告诉您确切的问题:"to" argument must be a list or tuple. 所以,把它放在一个列表或元组中。

to_email = (form.cleaned_data['email'],)

推荐阅读