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

时间:2019-02-06 08:58:07

标签: django email

注意:-我已经检查了this post的问题和答案,并且已经按照以下说明在我的设置中添加了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'

它可以正常工作,并且注册用户正在获取激活电子邮件并重置电子邮件。

现在,在为我的网站创建联系页面时,我添加了一个联系表,要求用户添加他的姓名,电子邮件和消息。

联系方式如下

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 个答案:

答案 0 :(得分:1)

您正试图让Zoho从其他人的电子邮件地址 向您发送消息。这样做不可行有两个原因:

  • Zoho(与任何知名的电子邮件提供商一样)不会让您发送冒充来自其他人的电子邮件。您只能通过自己的帐户(或您在Zoho中设置的域)发送 电子邮件。这就是为什么您会收到“不允许中继”错误的原因。
  • 即使Zoho 愿意让您从其他域发送电子邮件,也将最终在接收端陷入垃圾邮件(或被完全阻止)。 Gmail和大多数其他主要的电子邮件服务都具有可用信息列表,列出了来自其地址来自的电子邮件。如果电子邮件来自其他地方,那就是垃圾邮件。而且您的Zoho帐户不在他们的清单上! (如果您对详细信息感兴趣,请搜索DMARC,DKIM和SPF。)

因此,您必须从自己的Zoho地址发送消息 ,而不是从联系人的电子邮件地址发送消息。

联系表中的一个常见目标是能够轻松地答复填写该表的人员。如果您正在尝试这样做,则实现方法是Reply-To电子邮件标头。您需要使用Django的EmailMessage类来设置其他标头:

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'],
        headers={'Reply-To': contact_email})  # <<< where you want replies to go
    email_msg.send()

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