Django 发送email配置详解及各种错误类型
2014-03-03 21:34
393 查看
跟随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文件如下
<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', 'noreply@example.com'),
['接收信件的邮箱!'],
)
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
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文件如下
<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', 'noreply@example.com'),
['接收信件的邮箱!'],
)
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配置详解及各种错误类型
- Django配置有邮件发送错误信息
- ftp用户类型、配置文件详解以及“425 Security:Bad IP connection”解决方式
- Struts2的result中各种type类型以及配置文件的一些细节
- Struts2中 Result类型配置详解
- Hibernate配置各种数据源详解
- SpringBoot配置发送Email
- Django model select的各种用法详解
- MySQL详解各种乱码错误,java调用mysql中文参数查不到结果等解决方案(大章集合)
- 各种 django 静态文件的配置总结【待续】
- MySQL之——CentOS下my.cnf 配置 日志类型及文件配置详解(我本人服务器上的配置,亲测可用)
- Phabricator 在 centos 系统下发送 Email的配置
- https 单向认证和双向认证及tomcat配置及各种证书类型之间的转换,适用ios,Android,网页端
- Hibernate各种主键生成策略与配置详解
- 使用Gmail发送email时出现Must issue a STARTTLS command first错误!!
- Symbian 系统错误大全详解-涵盖所有类型错误(英文)
- Hibernate各种主键生成策略与配置详解
- Hibernate各种主键生成策略与配置详解
- Amule的linux下安装、配置详解及错误处理办法
- 解决关于"因为配置类型不正确,系统无法开始服务器进程..."的错误