Django 發送email配置詳解及各種錯誤類型
跟隨Django Book的內容發送郵件不成功,總結一下需要配置好settings.py文件,還要註意一些細節。
1、在settings文件最後添加以下內容,缺一不可!
EMAIL_HOST= ‘smtp.163.com‘
EMAIL_PORT= 25
EMAIL_HOST_USER = ‘[email protected]‘(你有163郵箱的話)
EMAIL_HOST_PASSWORD = ‘xxxxxxx‘
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
這裏Host郵箱最好還是寫163的,qq的我試過不行,別的也不敢保證可以。如果出現“STARTTLS extension not supported by server”這種錯誤類型很有可能是郵箱不支持。
2、出現Forbidden (403)“CSRF verification failed. Request aborted.”的錯誤
需要添加{% csrf_token %}到form中去,<form action="/contact/" method="post">{% csrf_token %}<p>...</p>...</form>
之後在contact()方法的views.py中添加from django.template import RequestContext並且最後一句改為return render_to_response(‘contact_form.html‘,{‘errors‘: errors}, context_instance=RequestContext(request))即可
3、我的目錄結構是這樣的:
mysite-->
books/
contact/
mysite/
templates/
manage.py
4.最後附上完整代碼
templates/contact_form.html文件如下
- <html>
- <head>
- <title>Contact us</title>
- </head>
-
<body>
- <h1>Contact us</h1>
- {% if errors %}
- <ul>
- {% for error in errors %}
- <li>{{ error }}</li>
- {% endfor %}
- </ul>
- {% endif %}
- <form action="/contact/" method="post">{% csrf_token %}
- <p>Subject: <input type="text" name="subject"></p>
- <p>Your e-mail (optional): <input type="text" name="email"></p>
- <p>Message: <textarea name="message" rows="10" cols="50"></textarea></p>
- <input type="submit" value="Submit">
- </form>
- </body>
- </html>
contact/views.py文件如下:
- from django.core.mail import send_mail
- from django.http import HttpResponseRedirect
- from django.shortcuts import render
- from django.template import RequestContext
- def contact(request):
- errors = []
- if request.method == ‘POST‘:
- if not request.POST.get(‘subject‘, ‘‘):
- errors.append(‘Enter a subject.‘)
- if not request.POST.get(‘message‘, ‘‘):
- errors.append(‘Enter a message.‘)
- if request.POST.get(‘email‘) and ‘@‘ not in request.POST[‘email‘]:
- errors.append(‘Enter a valid e-mail address.‘)
- if not errors:
- send_mail(
- request.POST[‘subject‘],
- request.POST[‘message‘],
- request.POST.get(‘email‘, ‘[email protected]‘),
- [‘接收信件的郵箱!‘],
- )
- return HttpResponseRedirect(‘/contact/thanks/‘)
- return render(request, ‘contact_form.html‘,
- {‘errors‘: errors},context_instance=RequestContext(request))
mysite/mysite/urls.py如下:
- from django.conf.urls import *
- from django.contrib import admin
- from books import views
- from mysite.views import emailsuccess
- from contact.views import contact
- admin.autodiscover()
- urlpatterns = patterns(‘‘,
- (r‘^contact/$‘,contact),
- (r‘^contact/thanks/$‘,emailsuccess),
- )
mysite/mysite/views.py文件如下:
- from django.http import HttpResponse,Http404
- def emailsuccess(request):
- return HttpResponse("Send Succeed!")
歡迎交流討論,共同學習!
轉載請註明出處:http://blog.csdn.net/monkeyduck
Django 發送email配置詳解及各種錯誤類型