在使用联系表单和Zoho邮件时出现SMTPDataError(553,b'Relaying disallowed as abc@email.com')错误。

4
注意:我已经检查了此帖子的问题和答案,并按照以下描述在我的设置中添加了default_from_email。现在,在我的联系表单中,我希望收到试图与我联系的用户的电子邮件。
嗨,我有一个使用Zoho邮件发送激活和密码重置电子邮件的Django构建的博客。为了实现相同的功能,我已经在我的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'

它运行得非常顺畅,用户注册后会收到激活邮件和重置邮件。

现在,在创建我的网站的联系页面时,我添加了一个联系表单,用户需要填写姓名、电子邮件和信息。

联系表单如下:

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

相应的视图为:-
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})

现在,当我添加电子邮件、消息和姓名时,会出现以下错误:-
SMTPDataError at /contact/
(553, b'Relaying disallowed as uditvashisht@gmail.com')
1个回答

7
您想让Zoho通过其他人的电子邮件地址向您发送消息,但这不可行,原因如下:
  • Zoho(像任何值得信赖的电子邮件提供商一样)不会允许您发送假冒他人的电子邮件。 您只能使用自己的帐户(或与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()

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

1
工作得很顺利...非常感谢。 - Udit Hari Vashisht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接