1.1-钉钉报警
参考官方文档:https://open.dingtalk.com/document/orgapp/custom-robot-access
调用频率限制:
由于消息发送太频繁会严重影响群的使用体验,因此自定义机器人发送消息的频率限制如下:
每个机器人每分钟最多发送20条消息到群里,如果超过20条,会限流10分钟。
步骤一:获取自定义机器WebHook
步骤二:在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像
步骤三:完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。
步骤四:完成设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
步骤五:使用自定义机器人
获取到Webhook地址后,用户可以向该地址发起HTTP POST 请求,即可实现给该钉钉群发送消息
注意:
- 已默认开通使用自定义机器人发消息的权限,无需申请。即向Webhook地址发请求时,无需申请权限。
- 发起POST请求时,必须将字符集编码设置成UTF-8。
- 每个机器人每分钟最多发送20条。消息发送太频繁会严重影响群成员的使用体验,大量发消息的场景 (譬如系统监控报警) 可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群里。
当前自定义机器人支持以下消息类型,请根据自己的使用场景选择合适的类型,详情参见消息类型及数据格式。
- 文本 (text)
- 链接 (link)
- markdown(markdown)
- ActionCard
- FeedCard
自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员收到该消息时,会有@消息提醒。免打扰会话仍然通知提醒,首屏出现“有人@你”
步骤六:测试自定义机器人:
import requests
def send_warning(info):
url = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
headers = {
"Content-Type": "application/json"
}
data = data = {
"msgtype":"text",
"text":{"content":"-----------自定义标题内容----------\n\n"+info},
"at": {
"atMobiles":[
"xxxx" # 电话号码
],
"atUserIds":[
"xxx" # 钉钉id
],
"isAtAll": False
}
}
res = requests.post(url=url,headers=headers,data=json.dumps(data)) # 发送post请求
print(res.text)
if __name__ == '__main__':
info = "xxx"
send_warning(info)
以上,钉钉的userID查看方式:钉钉客户端-个人信息-钉钉号 设置或查看
1.2-邮件发送
此处以网易邮箱为例,其他邮箱类似
1.2.1-邮件设置
仅显示一次,请妥善保存)
1.2.2-发送邮件类及方法
·类方法
发送邮件相关类方法:(配置完可直接使用),此处发送的为HTML标签及内容
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
class SendEmail:
def __init__(self,host,port,user,password):
self.__host = host
self.__port = port
self.__user = user
self.__password = password
self.smtp = smtplib.SMTP()
# 链接指定服务器
self.smtp.connect(host=self.__host,port=self.__port)
# 登陆,需要登陆邮箱和授权密码
self.smtp.login(user=self.__user, password=self.__password)
def send_message(self, content, subtype, charset=None, from_addr=None, to_addrs=None,header_text=None):
# 构造MIMEText对象,参数为:正文,MIME的subtype,编码方式
self.message= MIMEMultipart()
self.message.attach(MIMEText(content, subtype, charset))# 正文内容 plain代表纯文本,html代表支持html文本
# self.message = MIMEText(content,subtype, charset)
self.message["From"] = Header(from_addr) # 可自定义
if isinstance(to_addrs, list):
to_addrs_str = ','.join(to_addrs)
else:
to_addrs_str = to_addrs
self.message["To"] = Header(to_addrs_str)
self.message['Subject'] = Header(header_text, 'utf-8')
self.smtp.sendmail(from_addr=from_addr, to_addrs=to_addrs_str, msg=self.message.as_string())
if __name__ == "__main__":
SendEmail(host="smtp.163.com", port=25, user="xxx@163.com", password="xxx").send_message(content="""<h1 style="color:red">仅用于测试</h1>""",subtype='html',charset='utf-8',from_addr=
"xxx@163.com",to_addrs=["xxx@163.com","xxx@qq.com"],header_text="xxxx标题")
效果显示如下:
·方法
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_emailMessage():
# 创建 SMTP 对象
smtp = smtplib.SMTP()
# 连接(connect)指定服务器
smtp.connect(host="smtp.163.com", port=25)
# 登录,需要:登录邮箱和授权码
smtp.login(user="xxx@163.com", password="xxx")
message = MIMEText('xxx', 'plain', 'utf-8') # 此处为文本,设置为plain
message['From'] = Header("xxx@163.com") # 发件人的昵称
message['To'] = Header("xxx@163.com,xxx@qq.com") # 收件人的昵称
message['Subject'] = Header('xxx', 'utf-8') # 定义主题内容
print(message)
smtp.sendmail(from_addr="xxx@163.com", to_addrs="xxx@163.com,xxx@qq.com", msg=message.as_string())
if __name__=='__main__':
send_emailMessage()
效果显示如下: