0

在 django 代码中发送电子邮件不起作用,它显示错误“[Errno 10061] 无法建立连接,因为目标机器主动拒绝它”这些是我的VIEWS.PY

def send_email(request):
username = request.POST.get('username', '')
from_email = request.POST.get('from_email', '')
message = request.POST.get('message', '')
if username and message and from_email:
    try:
        send_mail(username, from_email, message,  ['canonizadocharm@ymail.com'])
    except BadHeaderError:
        return HttpResponse('Invalid header found.')
    return HttpResponseRedirect('/contact/thanks/')
else:
    # In reality we'd use a form class
    # to get proper validation errors.
    return HttpResponse('Make sure all fields are entered and valid.')

这些是我的contact.html

<FORM METHOD="POST" ACTION="/send_email/" >
{% csrf_token %}
Name: <INPUT TYPE="text" NAME="username"><BR>
Email: <INPUT TYPE="text" NAME="from_email"><BR>
Message: <BR>
<TEXTAREA NAME="message" ROWS="10" WRAP="hard">
</TEXTAREA>
<INPUT NAME="redirect" TYPE="hidden">
<INPUT NAME="NEXT_URL" TYPE="hidden">
<BR>
<INPUT TYPE="submit" VALUE="Send">
<INPUT TYPE="reset" VALUE="Clear">
</FORM>

这些是我的URLS.PY

url(r'^send_email/', views.send_email),
url(r'^contact/', views.contact),
url(r'^thanks/', views.thanks),

和我的SETTINGS.PY

EMAIL_HOST = 'localhost'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_PORT = 25
EMAIL_USE_TLS = True
4

3 回答 3

3

action的表单值必须指向查看的网址,mailto:canonizadocharm@ymail.com这不是您服务器上的有效路径。

更新

例如,向 urls.py 添加一条新规则,例如,

url(r'^mail/', views.send_mail),

然后将动作值更改为mail

于 2013-02-07T03:24:39.793 回答
0

让您的操作值指向一个 URL,该 URL 又指向您的一个视图。例如,您的 urls.py 可以做到这一点。

url(r'^email/', 'project.views.send_email')

这会将您的联系表格路由到您的 send_mail 视图。

于 2013-02-07T03:37:06.457 回答
0

您在模板中的表单没有 csrf,这就是您收到“CSRF 验证失败”错误的原因。

 <FORM METHOD=POST ACTION="/send_email/" ENCTYPE="text/plain">{% csrf_token %}
 ...........
 </FORM>

如果您想知道 csrf 是什么,请访问此链接:
https ://docs.djangoproject.com/en/dev/ref/contrib/csrf/


在您的 settings.py 中创建电子邮件设置,例如:

设置.py

# Sending mail
EMAIL_USE_TLS = True
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=587
EMAIL_HOST_USER='your gmail account'
EMAIL_HOST_PASSWORD='your gmail password'

视图.py

from django.core.mail import send_mail

def send_email(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        message = request.POST.get('message')
        from_email = request.POST.get('from_email')
        send_mail(username, message, from_email, ['canonizadocharm@ymail.com',])
        return HttpResponseRedirect('/contact/thanks/')
    else:
        return HttpResponse('Make sure all fields are entered and valid.')
于 2013-02-07T03:48:48.027 回答