Django Contact form: TypeError: "to" argument must be a list or tuple
Django Contact form: TypeError: "to" argument must be a list or tuple
我正在尝试让我的电子邮件联系表在我的 Django 网站上运行。
我的浏览器出现如下错误:
Exception Type: TypeError Exception Value: "to" argument must be a
list or tuple Exception
Location: /home/Gassymule/Skeletonv3.1/myvenv/lib/python3.6/site-packages/django/core/mail/message.py
in init, line 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'
我错过了什么?
在send_mail
中你需要像这样传递参数。
(subject, message, from_email, recipient_list)
其中 recipient_list
是要向其发送邮件的 email_addresses 的列表或元组。
您正在通过,其他参数:只需这样做
send_mail(subject, message, from_email, ['kkeeper.ch@gmail.com'])
它会正常工作。
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
。
我正在尝试让我的电子邮件联系表在我的 Django 网站上运行。 我的浏览器出现如下错误:
Exception Type: TypeError Exception Value: "to" argument must be a list or tuple Exception Location: /home/Gassymule/Skeletonv3.1/myvenv/lib/python3.6/site-packages/django/core/mail/message.py in init, line 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'
我错过了什么?
在send_mail
中你需要像这样传递参数。
(subject, message, from_email, recipient_list)
其中 recipient_list
是要向其发送邮件的 email_addresses 的列表或元组。
您正在通过,其他参数:只需这样做
send_mail(subject, message, from_email, ['kkeeper.ch@gmail.com'])
它会正常工作。
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
。