1. 程式人生 > >Django 發送email配置詳解及各種錯誤類型

Django 發送email配置詳解及各種錯誤類型

cut disco nal tac and ucc odi 添加 bject

跟隨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文件如下

  1. <html>
  2. <head>
  3. <title>Contact us</title>
  4. </head>
  5. <body>
  6. <h1>Contact us</h1>
  7. {% if errors %}
  8. <ul>
  9. {% for error in errors %}
  10. <li>{{ error }}</li>
  11. {% endfor %}
  12. </ul>
  13. {% endif %}
  14. <form action="/contact/" method="post">{% csrf_token %}
  15. <p>Subject: <input type="text" name="subject"></p>
  16. <p>Your e-mail (optional): <input type="text" name="email"></p>
  17. <p>Message: <textarea name="message" rows="10" cols="50"></textarea></p>
  18. <input type="submit" value="Submit">
  19. </form>
  20. </body>
  21. </html>


contact/views.py文件如下:

  1. from django.core.mail import send_mail
  2. from django.http import HttpResponseRedirect
  3. from django.shortcuts import render
  4. from django.template import RequestContext
  5. def contact(request):
  6. errors = []
  7. if request.method == ‘POST‘:
  8. if not request.POST.get(‘subject‘, ‘‘):
  9. errors.append(‘Enter a subject.‘)
  10. if not request.POST.get(‘message‘, ‘‘):
  11. errors.append(‘Enter a message.‘)
  12. if request.POST.get(‘email‘) and ‘@‘ not in request.POST[‘email‘]:
  13. errors.append(‘Enter a valid e-mail address.‘)
  14. if not errors:
  15. send_mail(
  16. request.POST[‘subject‘],
  17. request.POST[‘message‘],
  18. request.POST.get(‘email‘, [email protected]‘),
  19. [‘接收信件的郵箱!‘],
  20. )
  21. return HttpResponseRedirect(‘/contact/thanks/‘)
  22. return render(request, ‘contact_form.html‘,
  23. {‘errors‘: errors},context_instance=RequestContext(request))

mysite/mysite/urls.py如下:

  1. from django.conf.urls import *
  2. from django.contrib import admin
  3. from books import views
  4. from mysite.views import emailsuccess
  5. from contact.views import contact
  6. admin.autodiscover()
  7. urlpatterns = patterns(‘‘,
  8. (r‘^contact/$‘,contact),
  9. (r‘^contact/thanks/$‘,emailsuccess),
  10. )

mysite/mysite/views.py文件如下:

  1. from django.http import HttpResponse,Http404
  2. def emailsuccess(request):
  3. return HttpResponse("Send Succeed!")


歡迎交流討論,共同學習!

轉載請註明出處:http://blog.csdn.net/monkeyduck

Django 發送email配置詳解及各種錯誤類型