zoukankan      html  css  js  c++  java
  • Django 发送email配置详解及各种错误类型

    跟随Django Book的内容发送邮件不成功,总结一下需要配置好settings.py文件,还要注意一些细节。

    1、在settings文件最后添加以下内容,缺一不可!

    EMAIL_HOST= 'smtp.163.com'
    EMAIL_PORT= 25
    EMAIL_HOST_USER = 'xxxxxx@163.com'(你有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.  
       
    8.  
      {% if errors %}
    9.  
      <ul>
    10.  
      {% for error in errors %}
    11.  
      <li>{{ error }}</li>
    12.  
      {% endfor %}
    13.  
      </ul>
    14.  
      {% endif %}
    15.  
       
    16.  
      <form action="/contact/" method="post">{% csrf_token %}
    17.  
      <p>Subject: <input type="text" name="subject"></p>
    18.  
      <p>Your e-mail (optional): <input type="text" name="email"></p>
    19.  
      <p>Message: <textarea name="message" rows="10" cols="50"></textarea></p>
    20.  
      <input type="submit" value="Submit">
    21.  
      </form>
    22.  
      </body>
    23.  
      </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', 'noreply@example.com'),
    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.  
       
    8.  
      urlpatterns = patterns('',
    9.  
      (r'^contact/$',contact),
    10.  
      (r'^contact/thanks/$',emailsuccess),
    11.  
      )

    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

  • 相关阅读:
    Mysql8.0中caching_sha2_password报错解决
    Centos7 安装mysql-8.0.18(rpm)
    如何有效的清理yum缓存
    虚拟机安装后配置IP地址
    正确计算linux系统内存使用率
    Linux 怎样更改locale语言设置
    linux把EDT时间修改为CST格式
    开放接口的安全验证方案(AES+RSA)
    Linux下JDK中文字体乱码
    服务器http请求https服务时报错解决方案
  • 原文地址:https://www.cnblogs.com/ExMan/p/9471097.html
Copyright © 2011-2022 走看看