注意:- 我已经检查了这篇文章的问题和答案,并且我已经在我的设置中添加了 default_from_email,如下所述。现在,在我的联系表单中,我想接收来自尝试与我联系的用户的电子邮件。
嗨,我有一个用 Django 构建的博客,它使用 Zoho 邮件发送激活和密码重置电子邮件。为了实现相同的功能,我在 settings.py 中添加了以下代码
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '<myadmin emailaddress>'
EMAIL_HOST_PASSWORD = '<myadmin password>'
DEFAULT_FROM_EMAIL = '<myadmin email address'
Run Code Online (Sandbox Code Playgroud)
它完美无缺,注册的用户会收到激活电子邮件和重置电子邮件。
现在,在为我的网站创建联系页面时,我添加了一个联系表单,用户需要在其中添加他的姓名、电子邮件和消息。
联系方式是这样的
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)
同样的观点是:-
def contact_us(request):
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
sender_name = form.cleaned_data['name']
sender_email = form.cleaned_data['email']
message = f"{sender_name} has sent you a new message:\n\n{form.cleaned_data['message']}"
send_mail('New Enquiry', message, sender_email, ['admin@saralgyaan.com'])
return HttpResponse('Thanks for contacting us!')
else:
form = ContactForm()
return render(request, 'accounts/contactus.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
现在,当我添加电子邮件、消息和姓名时,出现以下错误:-
SMTPDataError at /contact/
(553, b'Relaying disallowed as uditvashisht@gmail.com')
Run Code Online (Sandbox Code Playgroud)
您正试图让 Zoho从其他人的电子邮件地址向您发送消息。这将不起作用,原因有两个:
因此,您必须从您自己的 Zoho 地址发送消息,而不是从联系人的电子邮件地址发送。
联系表格的一个常见目标是能够轻松回复填写表格的人。如果这就是您想要做的,那么实现它的方法是Reply-To电子邮件标题。您需要使用 Django 的EmailMessage类来包含reply_to(并注意它必须是一个列表,就像to):
from django.core.mail import EmailMessage
# Then to send in your form view...
contact_name = form.cleaned_data['name']
contact_email = form.cleaned_data['email']
message = f"{contact_name} has sent you a new message ..."
email_msg = EmailMessage(
subject='New Enquiry',
body=message,
from_email='admin@saralgyaan.com', # in your Zoho domain (omit to use DEFAULT_FROM_EMAIL)
to=['admin@saralgyaan.com'],
reply_to=[contact_email]) # where you want replies to go
email_msg.send()
Run Code Online (Sandbox Code Playgroud)
现在,当用户填写您的联系表单时,您会收到一封来自您自己的“新查询”电子邮件。如果您回复询问,您的回复将发送至联系人的电子邮件地址。