SMTPDataError (553, b'Relaying запрещен как abc@email.com ') при использовании контактной формы и Zoho Mail - PullRequest
0 голосов
/ 06 февраля 2019

Примечание: - Я проверил вопрос и ответ в этом сообщении , и я уже добавил 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 голосов
/ 07 марта 2019

Вы пытаетесь заставить 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()

Теперь, когда пользователь заполняет вашу контактную форму, вы получите «Новый запрос»письмо от себя.И если вы ответите на запрос, ваш ответ будет отправлен на адрес электронной почты контактного лица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...