利用表單發送郵件


前提:配置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 = 'xxxxxxxxx@126.com' # 發件人郵箱 EMAIL_HOST_PASSWORD = 'xxxxxxx' # 密碼 DEFAULT_FROM_EMAIL = 'mail@126.com' # 發件人

 

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頁面上保留有填好的錯誤表單,並有錯誤提示(見下圖)。

 

 
        
 
        
 
        
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM