邮件短信发送

1、python邮件发送
(1)、smtplib
Python发送邮件默认基于轻量级的邮件协议,smtp协议,SMTP协议是一个通过发送地址和目 的地址进行邮件发送的邮件协议
(2)、email

目前,许多服务商免费提供smtp服务器给用户。例如:163、qq、
(3)、Smtp邮件
pop3:邮件接收
imap:邮件发送
(4)、网易163免费邮箱介绍

(5)smtplib代码块
import smtplib #导入smtplib包
from email.mime.text import MIMEText

构建邮箱格式

subject=“致我们逝去的青春” #发送的标题
content=""“再见青春”"" #发送的内容
sender=“hanshaosh@163.com” #;发送者邮箱
recver=""" #接收者邮箱
2126579184@qq.com,
1262013975@qq.com,
576492000@qq.com
“”"
password=“han111111” #传输中的密码
message=MIMEText(content,“plain”,“utf-8”)

content:内容;plain:内容类型;utf-8:编码格式

message[“Subject”]=subject
message[“From”]=sender
message[“To”]=recver

发送邮件

smtp=smtplib.SMTP_SSL(“smtp.163.com”,465)
smtp.login(sender,password)
smtp.sendmail(sender,recver.split(",\n"),message.as_string())

sender:发送人;recver:接收人,需要的是一个列表[];

message.as_string:发送邮件 as_string是一种类似json的封装方式,

目的是为了在协议上传输邮件内容
smtp.close()

2、python短信发送
(1)、例如:注册“互亿无线”:http://www.ihuyi.com/ ,这个网站是收费的。
(2)、操作如下图所示

(3)、代码如下所示:
import requests #:需要安装pip install requests
url=“http://106.ihuyi.com/webservice/sms.php?method=Submit” #:来自于文档
account=“C42059483” #:APIID,接口
password=“3a908b6a18a22986bc57d267cfe808b3” #APIkey,秘钥
mobile=“18439866899” #:手机号码
content=“您的验证码是:135279。请不要把验证码泄露给其他人。” #:内容
headers={
“Content-type”: “application/x-www-form-urlencoded”,
“Accept”: “text/plain”
}

构建发送参数

data={
“account”:account,
“password”:password,
“mobile”:mobile,
“content”:content
}
#开始发送
response=requests.post(url,headers=headers,data=data)

url:请求接口路由;headers:请求头部;data:请求的内容

print(response.content.decode())

3、钉钉通信机器人
(1)、下载并注册钉钉,自定义添加机器人

(2)、代码块
import json,requests

添加机器人的webhook地址

url=“https://oapi.dingtalk.com/robot/send?access_token=
f36bbba055c8cc9cd5cfad6ef4caf5a8cc54975ce61c29be6979fdfe9a5efc5f”
headers={
“Content-Type”:“application/json”,
“Charset”:“utf-8” #编码方式
}
requests_data={
“msgtype”:“text”,
“text”:{
“content”:“小饿小困,来点香飘飘奶茶” #回复内容
},
“at”:{
“atMobiles”:[],
},
“isAtAll”:True
}
sendData=json.dumps(requests_data)
response=requests.post(url=url,headers=headers,data=sendData)
content=response.json()
print(content)

4、Django的邮件发送与短信发送
(1)、架构思想设计
Web 校验的流程
登录校验
1、输入用户名和密码
2、要求输入验证码
服务端要有触发发送验证码的事件
发送验证码的同时,将验证码保存到数据库
验证内容 05735
验证用户 对应用户
验证的时间 1991-11-11
验证状态 0 未使用 1已经使用
用户收到验证码
输入验证码
进行校验
检验成功:
校验码状态码修改
登录成功
校验失败:
登录失败
(2)、代码块(验证码建模)
class Valid_Code(models.Model):
code_content=models.CharField(max_length=32)
code_user=models.EmailField()
code_time=models.DateTimeField(auto_now_add=True)
code_state=models.IntegerField(default=0) #:使用0表示未使用

(3)、代码块(生成随机数)
import random,json
#生成随机数
def random_code(len=6):
“”"
生成6位数的随机验证码
:param len:
:return:
“”"
string=“1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
valid_code="".join([random.choice(string) for i in range(len)])
return valid_code

(4)、代码块(发送短信)
import requests
from Qshop.settings import DING_URL
def sendDing(content,to=None):
headers={
“Content-Type”:“application/json”,
“Charset”:“utf-8”
}
requests_data={
“msgtype”:“text”,
“text”:{
“content”:content
},
“at”:{
“atMobiles”:[
],
“isAtAll”:True
}
}
if to:
requests_data[“at”][“atMobiles”].append(to)
requests_data[“at”][“isAtAll”]=False
else:
requests_data[“at”][“atMobiles”].clear()
requests_data[“at”][“isAtAll”] = True
sendData=json.dumps(requests_data)
response=requests.post(url=DING_URL,headers=headers,data=sendData)
content=response.json()
return content

(5)、代码块(保存验证码)
from Seller.models import *
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def send_login_code(request):
result={
“code”:200,
“data”:""
}
if request.method==“POST”:
email=request.POST.get(“email”)
code=random_code()
c=Valid_Code()
c.code_user=email
c.code_content=code
c.save()
send_data="%s的验证码是%s:‘明月照我心,我心与明月;’"%(email,code)
sendDing(send_data)
result[“data”]=“发送成功”
else:
result[“code”]=400
result[“data”]=“请求错误”
return JsonResponse(result)

(6)、代码块(登录校验验证码)
def login(request):
error_message=""
if request.method==“POST”:
email = request.POST.get(“email”)
password = request.POST.get(“password”)
code=request.POST.get(“valid_code”) #检验验证码
# 首先检测email有没有
if email:
user = LoginUser.objects.filter(email=email).first()
if user:
db_password=user.password
password=setPassword(password)
if db_passwordpassword:
# 检测验证码
# 获取验证码
codes=Valid_Code.objects.filter(code_user=email).order_by("-code_time").first()
# 校验验证码是否存在,是否过期,是否被使用
now=time.mktime(datetime.datetime.now().timetuple())
db_time=time.mktime(codes.code_time.timetuple())
t=(now-db_time)/60
if codes and codes.code_state
0 and t<=5 and codes.code_content.upper()==code.upper():
response=HttpResponseRedirect("/Seller/index/")
response.set_cookie(“email”,user.email)
response.set_cookie(“user_id”,user.id)
request.session[“email”]=user.email
return response
else:
error_message=“验证码错误”
else:
error_message=“密码错误”
else:
error_message=“用户不存在”
else:
error_message=“邮箱不可以为空”
return render(request,“seller/login.html”,locals())

def logout(request):
response=HttpResponseRedirect("/login/")
keys=request.COOKIES.keys()
for key in keys:
response.delete_cookie(key)
del request.session[“email”]
return response

5、Django的异步任务_celery
(1)、celery介绍
将任务分配给其他的进程去运行,django的主进程只负责发起任务,而执行任务的不在时候django的主进程。Python有一个很棒的异步任务框架,叫做celery。

(2)、插件安装(Django-celery+redis)
1、pip install django-celery //
2、pip install django-redis //这是安装最新版本的,建议不这样安装,建议如下安装
推荐安装:pip install redis==2.10.6 //安装2.10.6版本

(3)、安装redis
1、解压,进入解压后的文件,右击选择‘打开命令窗口’
2、启动redis文件
redis-server.exe redis.window.conf //启动redis服务
3、链接redis服务器,关闭
“”"
右击,重新打开“命令窗口”
“”"
redis-cli.exe //执行关闭的第一步操作(链接redis服务)
shutdown //关闭

关闭

(4)、redis的端口是:6379
6、Django-celery的异步任务
和之前的开发相比,django-celery只是将任务发布出去,让长时间的任务:
爬取一个网站,发送一个验证码这样的工作,不在阻塞主线程,web服务器只负责发起任务和接受任务的结果,中间执行的部分交给其他线程、进程、服务器去做。
(1)、setting中配置django-celery

import djcelery #导入django-celery模块
djcelery.setup_loader() #:进行celery加载
BROKER_URL=“redis://127.0.0.1:6379/1” #任务容器地址,redis数据库地址
CELERY_IMPORTS=(‘CeleryTask.tasks’) #:具体任务文件
CELERY_TIMEZONE=‘Asia/Shanghai’ #:celery时区
CELERYBEAT_SCHEDULER=“djcelery.schedulers.DatabaseScheduler”
#celery事件的处理器,固定

(2)、创建并使用celery的APP
activate DjangoPath //激活沙箱环境
python manage.py startapp CeleryTask //创建celeryTask这个app

(3)、在主目录里面创建celery控制文件,celery.py
import os
from celery import Celery
from django.conf import settings

设置celery的环境变量和django-celery的工作目录

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’,‘CeleryTask.settings’)

实例化celery应用

app=Celery(“art_project”) #celery服务器的名称
app.config_from_object(‘django.conf:settings’) #:加载celery的配置
app.autodiscover_tasks(lambda:settings.INSTALLED_APPS) #如果在项目当中,
创建了task.py,那么celery就会沿着app去查找task.py来生成任务

(4)、在celeryTask app下新建tasks.py,并编码
from future import absolute_import
from Qshop.celery import app

@app.task #:将普通的任务转换为celery任务
def taskExample():
print(“I am task Example”)
return “I am task Example”
@app.task #:将普通的任务转换为celery任务
def add(x,y):
return x+y

(5)、同步数据库
activate DjangoPath
python manage.py check
python manage.py makemigrations
python manage.py migrate

(6)、djcelery添加新的指令

(7)、编写触发,启动celery worker
python manage.py celery worker --loglevel=info

(8)、视图中创建方法
from CeleryTask.tasks import add

def get_task(request):
num1=request.GET.get(“num1”,1)
num2=request.GET.get(“num2”,2)
add.delay(int(num1),int(num2))
return JsonResponse({“data”:“success”})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值