1.Python相关---钉钉报警及邮件发送

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-邮件设置

 开启POP3/SMTP服务,会产生一个授权码(仅显示一次,请妥善保存

 

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()

效果显示如下:

新增 邮件发送(推荐)

'''
邮件发送
'''
# -*- coding: UTF-8 –*-
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart



# 第三方 SMTP 服务
WANGYI_EMAIL_SMTP = "smtp.163.com"
WANGYI_EMAIL_SENDER = "xxx@163.com"
WANGYI_EMAIL_PASSCODE = "xxxxx"



class SendEmail():
    __instance = None

    def __init__(self, title=None, content=None, annex=None, mail_host=WANGYI_EMAIL_SMTP,
                 mail_user=WANGYI_EMAIL_SENDER, mail_pass=WANGYI_EMAIL_PASSCODE,
                 receivers=['xxx@qq.com']):
        # 第三方 SMTP 服务
        self.title = title  # 邮件主题
        self.content = content  # 邮件内容
        self.annex = annex  # 附件
        self.mail_host = mail_host  # SMTP服务器
        self.mail_user = mail_user  # 用户名
        self.mail_pass = mail_pass  # 授权密码,非登录密码
        self.receivers = receivers  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

    def __new__(cls, *args, **kwargs):
        if not SendEmail.__instance:
            SendEmail.__instance = object.__new__(cls)
        return SendEmail.__instance

    def set_receivers(self):
        if isinstance(self.receivers, list):
            return self.receivers
        if isinstance(self.receivers, str):
            if "," in self.receivers:
                self.receivers_list = self.receivers.split(",")
                return self.receivers_list
            else:
                return [self.receivers]
        return self.receivers

    def send_msg(self):
        self.receivers = self.set_receivers()
        email_client = smtplib.SMTP_SSL(self.mail_host, 465)
        email_client.login(self.mail_user, self.mail_pass)
        msg = MIMEMultipart()
        msg['Subject'] = Header(self.title, 'utf-8')
        msg['From'] = self.mail_user
        msg['To'] = ",".join(self.receivers)
        body = MIMEText(self.content, 'plain', 'utf-8')
        if isinstance(self.annex, list):
            for annex in self.annex:
                # 邮件头信息
                # 附件形式的内容添加到邮件
                attach_table = MIMEApplication(open(annex, "rb").read())
                attach_table.add_header('content-disposition', 'attachment', filename=annex.split("/")[-1])
                # 这样的话,附件名称就可以是中文的了,不会出现乱码
                attach_table.set_charset('utf-8')
                msg.attach(attach_table)

        elif isinstance(self.annex, str):
            # 邮件头信息
            # 附件形式的内容添加到邮件
            attach_table = MIMEApplication(open(self.annex, "rb").read())
            attach_table.add_header('content-disposition', 'attachment', filename=self.annex.split("/")[-1])
            # 这样的话,附件名称就可以是中文的了,不会出现乱码
            attach_table.set_charset('utf-8')
            msg.attach(attach_table)
        msg.attach(body)
        email_client.sendmail(self.mail_user, self.receivers, msg.as_string())
        print("mail has been send successfully.")
        email_client.quit()


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值