1、发送邮件代码django
以下为实现发送邮件的功能代码。使用时只须要按照参数要求实例化对象,对象调用send方法,即可实现发送邮件的需求。json
class Email(BaseMessage): def __init__(self): self.email = "xxxx" #发件人的邮箱 self.user = "yyyy" #发件人名称 self.pwd = 'zzzz' #发件人邮箱密码 def send(self,subject,body,to,name): ''' :param subject: 邮件主题 :param body: 邮件内容 :param to: 收件人邮箱 :param name: 收件人名称 :return: ''' msg = MIMEText(body, 'plain', 'utf-8') # 发送内容 msg['From'] = formataddr([self.user,self.email]) # 发件人 msg['To'] = formataddr([name, to]) # 收件人 msg['Subject'] = subject # 主题 server = smtplib.SMTP("smtp.126.com", 25) # SMTP服务,登陆发件人邮箱可查看 server.login(self.email, self.pwd) # 邮箱用户名和密码 server.sendmail(self.email, [to, ], msg.as_string()) # 发送者和接收者 server.quit()
2、发送微信api
发送微信消息通常是经过公众号或者服务号平台实现,注册这样平台帐号后,我的经过关注这样的公众号(会在平台生成并保存为我的生成的密钥),而后经过以下的代码,调用接口,利用平台将消息发送给关注的我的。缓存
# pip3 install requests import requests import json def get_access_token(): """ 获取微信全局接口的凭证(默认有效期俩个小时) 若是不天天请求次数过多, 经过设置缓存便可 """ result = requests.get( url="https://api.weixin.qq.com/cgi-bin/token", #api接口 params={ "grant_type": "client_credential", "appid": "wx89085e915d351cae", #注册后的公众号提供 "secret": "64f87abfc664f1d4f11d0ac98b24c42d", #注册后的公众号提供 } ).json() if result.get("access_token"): access_token = result.get('access_token') else: access_token = None return access_token def sendmsg(openid,msg): access_token = get_access_token() body = { "touser": openid, #用户经过关注公众号或者服务号后生成的我的密钥,保存在公众号平台内 "msgtype": "text", #发送内容的类型,支持多种类型 "text": { "content": msg #要发送的文本内容 } } response = requests.post( url="https://api.weixin.qq.com/cgi-bin/message/custom/send", #api接口 params={ 'access_token': access_token }, data=bytes(json.dumps(body, ensure_ascii=False), encoding='utf-8') ) # 这里可根据回执code进行断定是否发送成功(也能够根据code根据错误信息) result = response.json() print(result) if __name__ == '__main__': sendmsg('oK7y70g8OUdJWat84Nkt4sCnN5vg','要发送的内容')
3、应用实例微信
背景:在给某销售员工分配一个客户的时候,经过短息、微信、邮箱通知该用户,用户表中存储有该用户的电话、邮箱地址和关注微信公众号生成的我的密钥等信息,经过跨表能够查询。app
一、base.py:post
主要用于定义一个基类,要求继承该类的类必须实现某个方法,本例要求有send方法。ui
class BaseMessage(object): def send(self, subject, body, to, name): raise NotImplementedError('未实现send方法')
二、weixin.pyurl
主要用于实现发送微信的功能,本例未写出具体实例代码。spa
from .base import BaseMessage class WeChat(BaseMessage): def __init__(self): pass def send(self,subject,body,to,name): print('微信发送成功')
三、msg.py
主要用于实现发送短信的功能,本例未写出具体实例代码。
from .base import BaseMessage class Msg(BaseMessage): def __init__(self): pass def send(self,subject,body,to,name): print('短信发送成功')
四、email.py
主要实现发送邮件的功能,具体实例代码以下。
import smtplib from email.mime.text import MIMEText from email.utils import formataddr from .base import BaseMessage class Email(BaseMessage): def __init__(self): self.email = "m394559@126.com" #发件人的邮箱 self.user = "武沛齐" #发件人名称 self.pwd = 'WOshiniba' #发件人邮箱密码 def send(self,subject,body,to,name): ''' :param subject: 邮件主题 :param body: 邮件内容 :param to: 收件人邮箱 :param name: 收件人名称 :return: ''' msg = MIMEText(body, 'plain', 'utf-8') msg['From'] = formataddr([self.user,self.email]) msg['To'] = formataddr([name, to]) msg['Subject'] = subject server = smtplib.SMTP("smtp.126.com", 25) server.login(self.email, self.pwd) server.sendmail(self.email, [to, ], msg.as_string()) server.quit()
以上为咱们写的各个发送消息的类,每一个类中均要求实现了send方法。可是怎么用到某个操做以后呢?可能会想到对以上各个类进行实例化,而后逐一调用send方法。固然这样是可行的。可是鉴于代码的开放封闭原则,若是咱们将以上的调用写死在主代码中,某一天咱们想去掉某种消息提醒的方式时,咱们要在主代码中进行修改。这显然不符合开放封闭原则。改变方式就是在配置文件中进行配置,经过配置决定使用那些消息提醒方式。以下:
一、配置文件
'''
以下为各个类的路径,参考中间件方式配置
''' MESSAGE_CLASSES = [ 'utils.message.email.Email', 'utils.message.msg.Msg', 'utils.message.wx.WeChat', ]
二、massege.py
主要用于对配置文件中的路径进行解析,实现实例化,并调用send方法。
import importlib from django.conf import settings def send_message(to,name,subject,body): """ 短信、邮件、微信 :param to: 接受者 :param name: 接受者姓名 :param subject: 主题 :param body: 内容 :return: """ for cls_path in settings.MESSAGE_CLASSES: module_path,class_name = cls_path.rsplit('.',maxsplit=1) m = importlib.import_module(module_path) obj = getattr(m,class_name)() obj.send(subject,body,to,name,)
三、调用实例
import message message.send_message('931880645@qq.com','张三','交朋友','你好呀!')