Ошибка: SMTPRecipientsRefused 553, '5.7.1 # при работе с контактной формой в django - PullRequest
9 голосов
/ 14 февраля 2012

я пытаюсь создать контактную форму в django 1.3, python 2.6.

В чем причина следующей ошибки?

ошибка:

SMTPRecipientsRefused at /contact/
{'test@test.megiteam.pl': (553, '5.7.1 <randomacc@hotmail.com>: Sender address
rejected: not owned by user test@test.megiteam.pl')}

мои настройки.py:

EMAIL_HOST = 'test.megiteam.pl'
EMAIL_HOST_USER = 'test@test.megiteam.pl'
EMAIL_HOST_PASSWORD = '###' 
DEFAULT_FROM_EMAIL = 'test@test.megiteam.pl'
SERVER_EMAIL = 'test@test.megiteam.pl'
EMAIL_USE_TLS = True

edit: Если any1 еще следовал djangobook, это часть, вызывающая его:

        send_mail(
            request.POST['subject'],
            request.POST['message'],
            request.POST.get('email', 'noreply@example.com'), #get rid of 'email'
            ['siteowner@example.com'],

1 Ответ

12 голосов
/ 14 февраля 2012

Объяснение в сообщении об ошибке.Ваш хост электронной почты отклоняет электронную почту из-за адреса отправителя randomacc@hotmail.com, который вы взяли из контактной формы.

Вместо этого вы должны использовать свой собственный адрес электронной почты в качестве адреса отправителя.Вы можете использовать опцию reply_to, чтобы ответы отправлялись вашему пользователю.

email = EmailMessage(
    'Subject',
    'Body goes here',
    'test@test.megiteam.pl',
    ['to@example.com',],
    reply_to='randomacc@hotmail.com',
)
email.send()

В Django 1.7 и более ранних версиях аргумент reply_to отсутствует, но вы можете вручную установить Reply-Toзаголовок:

email = EmailMessage(
    'Subject',
    'Body goes here',
    'test@test.megiteam.pl',
    ['to@example.com',],
    headers = {'Reply-To': 'randomacc@hotmail.com'},
)
email.send()

Редактировать:

В комментариях вы спрашивали, как включить адрес отправителя в тело сообщения.message и from_email - это просто строки, поэтому вы можете объединить их так, как вы хотите, прежде чем отправлять электронное письмо.

Обратите внимание, что вы не должны получать аргумент from_email из ваших cleaned_data.Вы знаете, что from_address должно быть test@test.megiteam.pl, поэтому используйте его или, возможно, импортируйте DEFAULT_FROM_EMAIL из своих настроек.

Обратите внимание, что если вы создаете сообщение, используя EmailMessage, как в моем примере выше,и установите ответ в заголовок, тогда ваш почтовый клиент должен делать все правильно, когда вы нажимаете кнопку ответа.В приведенном ниже примере используется send_mail, чтобы сохранить его похожим на код , который вы связали с .

from django.conf import settings

...
    if form.is_valid():
        cd = form.cleaned_data
        message = cd['message']
        # construct the message body from the form's cleaned data
        body = """\
from: %s
message: %s""" % (cd['email'], cd['message'])
        send_mail(
            cd['subject'],
            body,
            settings.DEFAULT_FROM_EMAIL, # use your email address, not the one from the form
            ['test@test.megiteam.pl'],
        )
...