django邮件发送
#在项目里的配置文件settings.py中进行一些配置:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False #是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性。)
EMAIL_USE_SSL = True #是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST = 'smtp.163.com' #发送邮件的邮箱 的 SMTP服务器,这里用了163邮箱
EMAIL_PORT = 25 #发件箱的SMTP服务器端口
EMAIL_HOST_USER = 'charleschen@xmdaren.com' #发送邮件的邮箱地址
EMAIL_HOST_PASSWORD = '*********' #发送邮件的邮箱密码(这里使用的是授权码)
https://docs.djangoproject.com/zh-hans/2.0/topics/email/
#在views.py中制作一个简单的邮件并发送:
from django.core.mail import send_mail
# send_mail的参数分别是 邮件标题,邮件内容,发件箱(settings.py中设置过的那个),
收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
send_mail('Subject here', 'Here is the message.', 'charleschen@xmdaren.com',
['to@example.com'], fail_silently=False)
例子:
#----项目settings.py-----
#-----email--config-----
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False #是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性。)
EMAIL_USE_SSL = True #是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST = 'smtp.qq.com' #发送邮件的邮箱 的 SMTP服务器,这里用了QQ邮箱
EMAIL_PORT = 465 #发件箱的SMTP服务器端口
EMAIL_HOST_USER = '905690216@qq.com' #发送邮件的邮箱地址
EMAIL_HOST_PASSWORD = 'aecxiybyjgekbgae' #发送邮件的邮箱密码(这里使用的是授权码)
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#----t8\views.py---
from django.core.mail import send_mail, send_mass_mail
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
from django.views import View
class SendMyEmail(View):
def get(self,request):
"""普通邮件的发送"""
subject = '入职通知'
message = '恭喜你成功入职阿里,称为我们的一员'
from_email = '905690216@qq.com'
recipient_list = ['zx1005053430@163.com','912200556@qq.com']
send_mail(subject,message,from_email,recipient_list)
# send_mail的参数分别是 邮件标题,邮件内容,
# 发件箱(settings.py中设置过的那个),
# 收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
#(subject, message, from_email, recipient_list,
# fail_silently=False, auth_user=None, auth_password=None,
# connection=None, html_message=None)
return HttpResponse("邮件发送成功")
def send_emailss(req):
"""多封普通邮件的发送"""
subject = '入职通知'
message = '恭喜你成功入职阿里,称为我们的一员'
from_email = '905690216@qq.com'
recipient_list = ['zx1005053430@163.com', '912200556@qq.com']
subject1 = '入职通知'
message1 = '恭喜你成功入职阿里,称为我们的一员'
from_email1 = '905690216@qq.com'
recipient_list1 = ['2937524077@qq.com', '3393758538@qq.com']
senders1 = (subject, message, from_email, recipient_list)
senders2 = (subject1, message1, from_email1, recipient_list1)
send_mass_mail((senders1, senders2), fail_silently=False)
return HttpResponse("OK")
send_mail和send_mass_mail的区别
send_mail每次都连接SMTP服务
send_mass_mail 连一次就可以发多个
发送html的邮件
发送替代内容类型
在电子邮件中包含多个版本的内容可能很有用; 经典的例子是发送消息的文本和HTML版本。使用Django的电子邮件库,您可以使用EmailMultiAlternatives 该类来完成此操作。这个子类EmailMessage有一个 attach_alternative()在邮件中包含额外版本的邮件正文的方法。所有其他方法(包括类初始化)都直接从中继承EmailMessage。
要发送文本和HTML组合,您可以编写:
from django.core.mail import EmailMultiAlternatives
def email_html(req):
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
return HttpResponse("OK")
默认情况下,is 中的body
参数 的MIME类型。这是一个很好的做法,因为它保证了任何收件人都能够阅读邮件,而不管他们的邮件客户端。但是,如果您确信收件人可以处理替代内容类型,则可以使用该类上的属性 来更改主要内容类型。主要类型将始终是,但您可以更改子类型。例如:EmailMessage
"text/plain"``content_subtype
EmailMessage
"text"
msg = EmailMessage(subject, html_content, from_email, [to])
msg.content_subtype = "html" # Main content is now text/html
msg.send()
邮箱验证码
1 生成验证码
2 准备邮件内容 拼接验证url
3 发送邮件
4 拿到url里的那个token
5 改变邮箱对应用户的状态
生成验证连接发送邮件
#---views.py---------
from django.core.mail import EmailMultiAlternatives
def get_verify_code(req):
""" 01 给邮箱发送html类型的邮件,之后在html页面中用a标签实现跳转"""
param = req.GET
email = param.get('email')
name = param.get('name')
#生成验证码
token = myutil.get_token()
#拼接验证连接
verify_url = "http://mhh4399.com:8888/verify/"+token
#保存验证码
cache.set(token,email,60)
#发送邮件
title = "欢迎注册1806会员"
message = "请将链接复制到浏览器访问{url}".format(
url=verify_url
)
email_from = "912200556@qq.com"
html_content = '<a href={url}> {url} </a>'.format(url=verify_url)
msg = EmailMultiAlternatives(title, message, email_from, [email])
msg.attach_alternative(html_content, "text/html")
msg.send()
# send_mail(title,message,email_from,[email])
return HttpResponse("注册成功,请查看激活邮件")
def verify(req,token):
"""02 成功从邮件链接跳转过来,后验证邮箱是否正确"""
email = cache.get(token)
if email:
return HttpResponse("修改用户状态,可以使用"+email)
else:
return HttpResponse("验证链接不正确")
#-----urls.py----------
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^email$',views.send_my_mail),
url(r'^ems$',views.send_emailss),
url(r'^htmlems$',views.email_html),
url(r'^test$',evs.get_verify_code),
url(r'^verify/(.+)',evs.verify),
]