利用表單發送郵件
前提:配置settings.py
EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘
EMAIL_USE_TLS = False
EMAIL_HOST = ‘smtp.126.com‘ # 主機
EMAIL_PORT = 25 # 端口
EMAIL_HOST_USER = ‘[email protected]‘ # 發件人郵箱
EMAIL_HOST_PASSWORD = ‘xxxxxxx‘ # 密碼
DEFAULT_FROM_EMAIL = ‘[email protected]
1.forms.py
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField()
from_email = forms.EmailField() # 發件方
to_email = forms.EmailField() # 收件方
message = forms.CharField()
對應的url模式為:
url(r‘^contact/$‘, contact)
對應的表單樣式為:
在上圖中收件方利用qq郵箱失敗,但可以利用126和outlook郵箱。
2.views.py
from django.core.mail import send_mail
from django.shortcuts import render_to_response
from contact.forms import ContactForm
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext
def contact(request):
if request.method == ‘POST‘:
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail( # 調用django庫中的send_main函數
cd[‘subject‘], # 主題
cd[‘message‘], # 內容
cd.get(‘from_email‘), # 發件人
[cd.get(‘to_email‘)] # 收件人列表
)
return HttpResponseRedirect(‘/contact/thanks/‘) # 發送成功則重定向到thanks頁面
else:
form = ContactForm() # 失敗則為空表單
return render_to_response(‘contact_form.html‘, {‘form‘: form}, context_instance=RequestContext(request)) # 發送失敗則返回表單頁面
def thanks(request):
html = "<html><body><strong>Thanks</body></html>" # 簡單的頁面顯示Thanks
return HttpResponse(html)
url(r‘^contact/thanks/$‘, thanks)為感謝頁面url
3.contact_form.html
<html>
<head>
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1><form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
</form>
</body>
</html>
4.發送結果
5.流程解釋
首先訪問contact/時,urls將其指向views.py中的contact函數(由語句url(r‘^contact/$‘, contact))實現。
因為此時沒有提交任何東西,所以語句 request.method==‘POST‘不成立,直接執行 form = ContactForm()語句,並返回 contact_form.html頁面。
此時填寫好表單提交後,若數據合法則送郵件,然後執行語句重定向到 /contact/thanks 網頁。若數據不合法,則在contact_form.html頁面上保留有填好的錯誤表單,並有錯誤提示(見下圖)。
利用表單發送郵件