使用联系表格和 Zoho Mail 时出现 SMTPDataError(553,b'Relaying disallowed as abc@email.com')

Udi*_*sht 3 email django

注意:- 我已经检查了这篇文章的问题和答案,并且我已经在我的设置中添加了 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)

med*_*nds 5

您正试图让 Zoho其他人的电子邮件地址向您发送消息。这将不起作用,原因有两个:

  • 百会(像任何有信誉的电子邮件服务提供商)不会让您发送电子邮件伪装成来自别人。您只能您自己的帐户(或您使用 Zoho 设置的域)发送电子邮件。这就是为什么您会收到“不允许中继”错误的原因。
  • 即使百会将会让你从其他域发送邮件,它会归入垃圾邮件(或只是完全阻塞)在接收端。Gmail 和大多数其他主要电子邮件服务都提供可用信息,列出来自其地址的电子邮件的来源。如果电子邮件来自其他地方,那就是垃圾邮件。而且您的 Zoho 帐户不在他们的列表中!(如果您对详细信息感兴趣,请搜索 DMARC、DKIM 和 SPF。)

因此,您必须您自己的 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)

现在,当用户填写您的联系表单时,您会收到一封来自您自己的“新查询”电子邮件。如果您回复询问,您的回复将发送至联系人​​的电子邮件地址。