【问题标题】:Django Contact form: TypeError: "to" argument must be a list or tupleDjango 联系表单:TypeError:“to”参数必须是列表或元组
【发布时间】:2018-06-14 21:16:56
【问题描述】:

我正在尝试让我的电子邮件联系表在我的 Django 网站上工作。 我的浏览器出现如下错误:

异常类型:TypeError 异常值:“to”参数必须是 列表或元组异常 位置:/home/Gassymule/Skeletonv3.1/myvenv/lib/python3.6/site-packages/django/core/mail/message.py 在 init 中,第 264 行

特别强调

try:
     send_mail(name, company, phone, subject, message, from_email, ['kkeeper.ch@gmail.com'])

从我的 views.py 来看,但我不完全确定它需要我修复什么。我从中获取的教程网站使用了这种确切的格式。

views.py

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from website.forms import ContactForm
from django.core.mail import send_mail, BadHeaderError


def email(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            name = form.cleaned_data['name']
            company = form.cleaned_data['company']
            phone = form.cleaned_data['phone']
            try:
                send_mail(name, company, phone, subject, message, from_email, ['kkeeper.ch@gmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('thanks')
    return render(request, "email.html", {'form': form})


def thanks(request):
    return HttpResponse('Thank you for your message.')

这是我的联系表单模板中的相关代码。

email.html

            <form action="" method="post">
                {% csrf_token %}
                <ul class="contactList">
                    <li id="name" class="contact">{{ form.name }}</li>
                    <li id="company" class="contact">{{ form.company }}</li>
                    <li id="email" class="contact">{{ form.from_email }}</li>
                    <li id="phone" class="contact">{{ form.phone }}</li>
                    <li id="subject" class="contact">{{ form.subject }}</li>
                    <li id="message" class="contact">{{ form.message }}</li>
                </ul>
                <input id=submitb type="submit" value="Submit">
            </form>
        </div>

这是我的forms.py

forms.py

from django import forms


class ContactForm(forms.Form):

    from_email = forms.EmailField(required=True)
    subject = forms.CharField(required=False,)
    message = forms.CharField(widget=forms.Textarea(attrs={'cols': 43, 'rows': 8}))
    name = forms.CharField(required=True)
    phone = forms.CharField(required=False)
    company = forms.CharField(required=False)



    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['from_email'].widget.attrs['placeholder'] = 'Email'
        self.fields['subject'].widget.attrs['placeholder'] = 'Subject'
        self.fields['message'].widget.attrs['placeholder'] = 'Message'
        self.fields['name'].widget.attrs['placeholder'] = 'Name'
        self.fields['phone'].widget.attrs['placeholder'] = 'Phone'
        self.fields['company'].widget.attrs['placeholder'] = 'Company'

我错过了什么?

【问题讨论】:

    标签: django forms views


    【解决方案1】:

    send_mail 中,您需要像这样传递参数。

    (subject, message, from_email, recipient_list)
    

    其中recipient_list 是要向其发送邮件的电子邮件地址列表或元组。

    您正在传递其他参数:只需这样做

    send_mail(subject, message, from_email, ['kkeeper.ch@gmail.com'])
    

    它会正常工作的。

    【讨论】:

      【解决方案2】:

      send_email 方法的签名是

      send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)
      

      https://docs.djangoproject.com/en/2.0/topics/email/#send-mail

      从您的代码中删除前三个参数:name, company, phone

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2019-09-15
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        相关资源
        最近更新 更多