这一篇教程,我们一起来学习使用Django发送电子邮件。
首先,我们先来看一下撰写邮件的页面。
还有收到的邮件内容。
接下来,我们结合Django的表单完成上述功能。
一、创建表单类。
打开“forms.py”文件,根据截图中的页面元素,我们创建表单类“FileMailForm”,这个类包含邮件附件字段。
示例代码:(forms.py)
fromdjangoimportforms
classFileMailForm(forms.Form):
addressees=forms.CharField(label=收件地址,help_text=多个收件地址请用逗号“,”分隔,label_suffix=:,
widget=forms.TextInput(attrs={style:width:px,maxlength:}))
#定义收件地址字段,因为支持群发,所以未使用“EmailField”。
subject=forms.CharField(label=邮件标题,label_suffix=:,
widget=forms.TextInput(attrs={style:width:px,maxlength:}))
#定义邮件标题字段,指定文本框宽度并限定字符数量。
message=forms.CharField(label=邮件内容,label_suffix=:,widget=forms.Textarea(attrs={cols:60,rows:10}))
#定义邮件内容字段,指定使用文本域(多行文本框)标签,并设置标签的属性。
file=forms.FileField(label=添加附件,label_suffix=:)
#定义邮件附件的字段。
cc_myself=forms.BooleanField(label=抄送自己,label_suffix=:,required=False)
#定义抄送给发件人字段,指定为布尔类型(真假值)的字段。
提示:邮件地址字段可以使用“EmailField”,但不支持对多个邮件地址进行验证。
这里,我们还要考虑到发送邮件时会有两种情况:有附件和没有附件。
所以,我们创建一个“FileMailForm”类的子类“TextEmailForm”,子类中对“file”字段进行重写,当没有邮件附件时,通过这个类实例化表单。
示例代码:
classTextEmailForm(FileMailForm):
file=None
二、创建模板
1、创建一个HTML文件“email.html”,用于撰写邮件。
示例代码:(email.html)
!DOCTYPEhtml
html
head
metacharset=UTF-8
title撰写邮件/title
/head
body
formaction=/send_email/method=postnovalidate=novalidateenctype=multipart/form-data
{%csrf_token%}
{%forfieldinemail_form%}
div
{{field.label_tag}}
{{field}}
{%iffield.help_text%}
spanstyle=color:orange{{field.help_text}}/span
{%endif%}
/div
br
{%endfor%}
inputtype=submitvalue=发送邮件
/form
/body
/html
在上方代码中,form标签额外添加了两个属性,“novalidate”属性用于禁用浏览器的字段验证,“enctype”属性规定在发送到服务器之前,如何对表单数据进行编码,此处的设置”multipart/form-data”表示不进行编码,在使用包含文件上传元素的表单时,必须使用这个属性值。
2、创建一个HTML文件“thanks.html”,用于发送邮件后的提示。
示例代码:(thanks.html)
!DOCTYPEhtml
html
head
metacharset=UTF-8
title感谢/title
/head
body
您已发送b{{count}}/b封邮件到以下