Python django实现简单的邮件系统发送邮件功能
本文实例讲述了Python django实现简单的邮件系统发送邮件功能。
django邮件系统
Django发送邮件官方中文文档
总结如下:
1、首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了。
2、send_mail()、send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage。
3、异常处理防止邮件头注入。
4、一定要弄懂Email backends 邮件发送后端
5、多线程的邮件发送。
个人简单配置如下:
首先是settings.py文件
|
1
2
3
4
5
6
7
8
9
10
|
#settings.py#邮件配置EMAIL_HOST = \'smtp.gmail.com\' #SMTP地址
EMAIL_PORT = 25 #SMTP端口
EMAIL_HOST_USER = \'pythonsuper@gmail.com\' #我自己的邮箱
EMAIL_HOST_PASSWORD = \'******\' #我的邮箱密码
EMAIL_SUBJECT_PREFIX = u\'[CoorCar网]\' #为邮件Subject-line前缀,默认是\'[django]\'
EMAIL_USE_TLS = True #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
#管理员站点SERVER_EMAIL = \'xinxinyu2011@163.com\' #The email address that error messages come from, such as those sent to ADMINS and MANAGERS.
|
这里推荐:各大型邮箱smtp服务器及端口收集 各大型邮箱smtp服务器及端口收集: 新浪邮箱smtp服务器 外发服务器:smtp.vip.sina.com 收件服务器:pop3.vip.sina.com 新浪免费邮件 外发服务器:smtp.sina.com.cn 收件服务器:pop3.sina.com.cn 163邮箱smtp服务器 pop: pop.163.com smtp: smtp.163.com QQ邮箱smtp服务器及端口 接收邮件服务器:imap.exmail.qq.com,使用SSL,端口号993 发送邮件服务器:smtp.exmail.qq.com,使用SSL,端口号465或587 yahoo邮箱smtp服务器 接:pop.mail.yahoo.com.cn 发:smtp.mail.yahoo.com 126邮箱smtp服务器 pop: pop.126.com smtp: smtp.126.com 新浪免费邮箱 POP3:pop.sina.com SMTP:smtp.sina.com SMTP端口号:25 新浪VIP邮箱 POP3:pop3.vip.sina.com SMTP:smtp.vip.sina.com SMTP端口号:25 新浪企业邮箱 POP3:pop.sina.com SMTP:smtp.sina.com SMTP端口号:25 雅虎邮箱 POP3:pop.mail.yahoo.cn SMTP:smtp.mail.yahoo.cn SMTP端口号:25 搜狐邮箱 POP3:pop3.sohu.com SMTP:smtp.sohu.com SMTP端口号:25 TOM邮箱 POP3:pop.tom.com SMTP:smtp.tom.com SMTP端口号:25 Gmail邮箱 POP3:pop.gmail.com SMTP:smtp.gmail.com SMTP端口号:587 或 25 QQ邮箱 POP3:pop.exmail.qq.com SMTP:smtp.exmail.qq.com SMTP端口号:25 263邮箱 域名:263.net POP3:263.net SMTP:smtp.263.net SMTP端口号:25 域名:x263.net POP3:pop.x263.net SMTP:smtp.x263.net SMTP端口号:25 域名:263.net.cn POP3:263.net.cn SMTP:263.net.cn SMTP端口号:25 域名:炫我型 POP3:pop.263xmail.com SMTP:smtp.263xmail.com SMTP端口号:25 21CN 免费邮箱 POP3:pop.21cn.com SMTP:smtp.21cn.com IMAP:imap.21cn.com SMTP端口号:25 21CN 经济邮邮箱 POP3:pop.21cn.com SMTP:smtp.21cn.com SMTP端口号:25 21CN 商务邮邮箱 POP3:pop.21cn.net SMTP:smtp.21cn.net SMTP端口号:25 21CN 快感邮箱 POP3:vip.21cn.com SMTP:vip.21cn.com SMTP端口号:25 21CN Y邮箱 POP3:pop.y.vip.21cn.com SMTP:smtp.y.vip.21cn.com SMTP端口号:25 中华网任我邮邮箱 POP3:rwpop.china.com SMTP:rwsmtp.china.com SMTP端口号:25 中华网时尚、商务邮箱 POP3:pop.china.com SMTP:smtp.china.com SMTP端口号:25
那么发送邮件如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def setEmail(request):
if request.method == "POST":
# 方式一:# send_mail(\'subject\', \'this is the message of email\', \'pythonsuper@gmail.com\', [\'1565208411@qq.com\',\'1373763906@qq.com\'], fail_silently=True)# 方式二:# message1 = (\'subject1\',\'this is the message of email1\',\'pythonsuper@gmail.com\',[\'1565208411@qq.com\',\'xinxinyu2011@163.com\'])# message2 = (\'subject2\',\'this is the message of email2\',\'pythonsuper@gmail.com\',[\'1373763906@qq.com\',\'xinxinyu2011@163.com\'])# send_mass_mail((message1,message2), fail_silently=False)# 方式三:防止邮件头注入# try:# send_mail(subject, message, from_email, recipient_list, fail_silently, auth_user, auth_password, connection)# except BadHeaderError:# return HttpResponse(\'Invaild header fount.\')# 方式四:EmailMessage() #首先实例化一个EmailMessage()对象
# em = EmailMessage(\'subject\',\'body\',\'from@example.com\',[\'1565208411@qq.com\'],[\'xinxinyu2011@163.com\'],header={\'Reply-to\':\'another@example.com\'}) #调用相应的方法
# 方式五:发送多用途邮件 subject,form_email,to = \'hello\',\'from@example.com\',\'1565208411@qq.com\'
text_content = \'This is an important message\'
html_content = u\'<b>激活链接:</b><a href="http://www.baidu.com" rel="external nofollow" >http:www.baidu.com</a>\'
msg = EmailMultiAlternatives(subject,text_content,form_email,[to])
msg.attach_alternative(html_content, \'text/html\')
msg.send()
# 发送邮件成功了给管理员发送一个反馈# mail_admins(u\'用户注册反馈\', u\'当前XX用户注册了该网站\', fail_silently=True) return HttpResponse(u\'发送邮件成功\')
return render_to_response(\'common/test.html\')
|
截图如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Send_mail(object):
\'\'\'发送邮件\'\'\'
def __init__(self,sender,passward,receivers):
self.sender=sender
self.password=passward
self.receivers=receivers
def send(self,ShowText,Name,Header_show):
\'\'\'
:param ShowText: 发送内容
:param Name: 发送者
:param Header_show: 发送文件抬头
:return:
\'\'\'
message = MIMEText(\'%s\'%(ShowText), \'plain\', \'utf-8\')
message[\'From\'] = Header("%s"%(Name), \'utf-8\')
message[\'To\'] = Header("jiayuguang@qq.com")
message[\'Subject\'] = Header("%s"%(Header_show),\'utf-8\')
smtpObj=smtplib.SMTP(\'smtp.163.com\')
smtpObj.set_debuglevel(1)
smtpObj.login(self.sender,self.password)
smtpObj.sendmail(self.sender,self.receivers,message.as_string())
smtpObj.quit()
|