1. 程式人生 > >利用表單發送郵件

利用表單發送郵件

user 表單提交 strong response turn contact 端口 實現 tls

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

技術分享




 

利用表單發送郵件