发送邮件
在settings.py中添加以下设置:
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com' # 根据自己的邮箱修改
EMAIL_PORT = 465 # 根据自己的邮箱修改
EMAIL_HOST_USER = "xxx@qq.com" # 输入自己的邮箱地址
EMAIL_HOST_PASSWORD = "xxxxx" # 输入邮箱的授权码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER # 默认邮件的发送人
注:邮箱需开启SMTP等服务
用处:激活用户状态, 修改密码, 账单, 程序的监控,及时通知
1、简单发送email
- 发送邮件的步骤
-
1、设置邮件标题
-
2、设置邮件内容
-
3、设置收件人
-
4、选择发送者
-
5、发送邮件,如:send_mail(标题, 内容, 发送人, 收件人)
def test_email(req): title = "test" # 文章的标题 msg = "这是测试内容" # 内容 receivers = [ # 这里可以写入收件人,以列表形式写入,可写入多个人 xxxx@qq.com, ssss@163.com ] email_from = settings.DEFAULT_FROM_EMAIL # 默认邮件的发送人 send_mail(title, msg, email_from, receivers) # 发送邮件 return HttpResponse("ok")
-
2、发送HTML
- 步骤
-
1、加载html
-
2、渲染html
-
之后步骤与简单发送emai类似,在send_mail中加入html_message=渲染的html即可
from django.template import loader def send_html(req): title = "testHTML" # 加载html template = loader.get_template("testHTML.html") # 渲染html html = template.render({"title": "百度", "url": "https://www.baidu.com"}) # 将变量title与url传入html文件 receivers = [ xxxx@qq.com ] email_from = settings.DEFAULT_FROM_EMAIL # 再发送邮件 send_mail(title, "", email_from, receivers, html_message=html) return HttpResponse("ok") 注:html文件需要自己创建,上文中我创建了一个名为testHTML,html的文件
-
3、带附件发送邮件
- 步骤
-
1、标题
-
2、内容
-
3、收件人
-
4、发件人
-
5、实例化邮件信息: message = EmailMessage(标题, 内容, 发件人, 收件人)
-
6、加载附件路径: message.attach_file(附件的路径, 文件格式)
-
7、发送邮件
from django.core.mail import send_mail, EmailMessage def file_email(req): title = "title001" msg = "随便写点什么" receivers = [ ssss@qq.com ] email_from = settings.DEFAULT_FROM_EMAIL # 实例化邮件信息 message = EmailMessage(title, msg, email_from, receivers) # 拼接附件路径 file_path = os.path.join(settings.STATICFILES_DIRS[0], "qingchun.jpg") # 加载附件路径 后面为文件格式 message.attach_file(file_path, "image/jpg") # 发送邮件 message.send() return HttpResponse("ok")
-
4、同时发送多个email
- 步骤
-
邮件1 msg1 = (标题, 内容, 发件人, 收件人)
-
邮件2 msg2 = (标题, 内容, 发件人, 收件人)
-
…
-
发送邮件 : send_mass_mail((msg1, msg2, …))
def send_many_msg(req): receivers = [ xxxx@qq.com ] email_from = settings.DEFAULT_FROM_EMAIL msg1 = ('title1', "msg1", email_from, receivers) msg2 = ("title2", "msg2", email_from, receivers) send_mass_mail((msg1, msg2)) return HttpResponse("ok")
-
send_mail和send_mass_mail :send_mail 每一次发送都要连接到SMTP服务器,而send_mass_mail 可以连接一次发送多封
邮件验证
1、发送验证信息至邮箱
- 步骤
-
步骤与发送html类似
-
1、生成验证连接
-
2、准备好模板
-
3、准备邮件内容
-
4、记录缓存,建议以生成的唯一标识符为key 邮箱为value
-
5、发送邮件
def send_check_email(req): # 获取唯一标识符,调用函数onlyStr onlyStr = onlyStr() url = 'http://' + req.get_host() + '/app名称/send_check_email/' + onlyStr # 加载模板 template = loader.get_template("temp.html") html = template.render({"title": "验证", "url": url}) title = "验证链接" user_email = xxxx@qq.com receivers = [ user_email ] email_from = settings.DEFAULT_FROM_EMAIL send_mail(title, "", email_from, receivers, html_message=html) # 设置缓存 cache.set(onlyStr, user_email, settings.VERIFY_CODE_MAX_AGE) return HttpResponse("注册成功,请注意查收邮件") 注:settings.VERIFY_CODE_MAX_AGE为在settings.py中写入的过期时间,格式如下: VERIFY_CODE_MAX_AGE = 600 # 单位为秒
-
以下为定义onlyStr的函数:
import uuid
import hashlib
def onlyStr():
uuid_val = uuid.uuid4()
uuid_str = str(uuid_val).encode('utf-8')
md5 = hashlib.md5()
md5.update(uuid_str)
return md5.hexdigest()
2、验证邮箱
def check(req, code):
# 去缓存拿数据
email = cache.get(code)
if email:
return HttpResponse(email+"验证成功")
else:
return HttpResponse("验证无效")
注:若是注册账号可以给账号设置is_active属性,若邮箱验证通过则则设置为True,可以正常操作,否则为False,账号未激活