一、发送邮件
Smtp:轻量级邮件发送协议,邮件的发送和接收人。我们今天采用163邮箱的smtp服务器
开启163的smtp服务器(绑定自己的手机)
163邮箱地址:https://mail.163.com/
Smtp服务器地址和端口
ssl: smtp.163.com:465
非ssl : smtp.163.com:25
代码实现:
"""
1、发件人
账号:jack_dawson_email@163.com
密码:*******
授权码:ymm123
2、收件人
账号:gebidaxiaowang@126.com
密码:*******
"""
def my_send_email():
"""发邮件"""
# 导入包
import smtplib
from email.mime.text import MIMEText
# 邮件信息-发件人
sender = "jack_dawson_email@163.com"
# 邮件信息-收件人
receiver = "gebidaxiaowang@126.com"
# 邮件信息-授权码
password = "ymm123"
# 邮件信息-主题
subject = "发邮件"
# 邮件信息-内容
content = "你好,<a href='http://127.0.0.1:8000/'>单击访问<strong>每日生鲜</strong>首页</a>。"
# 创建邮件文本对象(内容,类型,编码)
mime_text = MIMEText(content, "html", "utf-8")
# 赋值属性
mime_text["Subject"] = subject
mime_text["From"] = sender
mime_text["To"] = receiver
# 创建smtp对象
my_smtp = smtplib.SMTP_SSL("smtp.163.com", 994)
# 登录,账号错误会抛异常
my_smtp.login(sender, password)
# 发送邮件(发件人,收件人集合,内容)
my_smtp.sendmail(sender, [receiver], mime_text.as_string())
# 关闭
my_smtp.quit()
print("发送成功")
def my_send_email_many():
"""发邮件-发个多人"""
# 导入包
import smtplib
from email.mime.text import MIMEText
# 邮件信息-发件人
sender = "jack_dawson_email@163.com"
# 邮件信息-收件人
receiver1 = "gebidaxiaowang@126.com"
receiver2 = "278455900@qq.com"
# 邮件信息-授权码
password = "ymm123"
# 邮件信息-主题
subject = "发邮件2"
# 邮件信息-内容
content = "你好,<a href='http://127.0.0.1:8000/'>单击访问<strong>每日生鲜</strong>首页</a>。"
# 创建邮件文本对象(内容,类型,编码)
mime_text = MIMEText(content, "html", "utf-8")
# 赋值属性
mime_text["Subject"] = subject
mime_text["From"] = sender
mime_text["To"] = ",".join([receiver1,receiver2])#多个收件人使用逗号隔开
# 创建smtp对象
my_smtp = smtplib.SMTP_SSL("smtp.163.com", 994)
# 登录,账号错误会抛异常
my_smtp.login(sender, password)
# 发送邮件(发件人,收件人集合,内容)
my_smtp.sendmail(sender, [receiver1,receiver2], mime_text.as_string())
# 关闭
my_smtp.quit()
print("发送成功")
if __name__ == '__main__':
my_send_email()
# my_send_email_many()
二、发送短信
发送短信需要借助于第三方发送短信平台实现效果,这里我们使用容联云第三方平台
https://www.yuntongxun.com/
三、异步通信框架Celery
开发中有一些任务就是耗时的,比如发短信。怎么解决呢?
Python 的Celery框架,是一个专门用来处理异步任务的框架
异步任务:当任务被发起,不会阻塞主线程,会到另外的线程或者进程当中运行,直到结束,返回结果
在工作当中的案例:
验证码的收发,就会使用异步任务
在用户点击发送验证码之后,系统进入发送验证码状态,如果是同步执行,那么这个时候服务器进行阻塞状态,直到验证码发送完成。用户体验很糟糕。于是,在用户点击发送验证码之后,服务器把任务提交给另外的一个进程或者服务器进行执行,完成之后,把结果反馈回来,这样,在发送验证码的过程当中,用户操作不受影响
Celery除了执行异步任务,还可以执行定时任务
user:发起任务的人
broker:任务列表
workers: 执行任务对象,可以是一个线程,一个进程或者一个服务器
store: 结果容器
1、在发送任务之前,worker启动
2、用户发起任务,任务通常以函数的形式存在
3、执行完的结果放回store当中
Celery 最常用的两种任务容器和结果容器是:
1、Redis ,NoSQL数据库,Redis被频繁的使用在并发,分布式当中,Redis可以将数据存在内存当中,运算快
2、RabbitMQ 消息队列,是一个成熟的用于任务存储和转发的消息队列。