我试图在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')}
我的settings.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
编辑:如果任何其他人跟随djangobook,这就是导致它的部分:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', 'noreply@example.com'), #get rid of 'email'
['siteowner@example.com'],
答案 0 :(得分:12)
说明在错误消息中。由于您从联系表单中提取的发件人地址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
只是字符串,因此您可以在发送电子邮件之前将它们组合在一起。
请注意,您不应该从cleaning_data获取from_email
参数。您知道from_address
应该是test@test.megiteam.pl
,因此请使用它,或者从您的设置中导入DEFAULT_FROM_EMAIL
。
请注意,如果您使用上面示例中的EmailMessage
创建邮件,并将回复设置为标题,那么当您点击回复按钮时,您的电子邮件客户端应该做正确的事情。以下示例使用send_mail
使其与code you linked to类似。
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'],
)