首先我们需要先看一下TASKCTL自带的微信文档,理解TASKCTL消息的产生已经处理逻辑,有两处是和这个有关的,这里我截图整理给大家。
https://mp.weixin.qq.com/s/YaKFOxWfbj5GS6OY7NYSlQ 来源微信文档 4801
https://mp.weixin.qq.com/s/rYRRCC7stgMFhivYydvvNw 来源微信文档 4423
看完上述文档后我们大概会有一点这样的理解
TASKCTL平台的产生一些消息(可能是流程中作业报错/自定义消息/平台的预警消息);然后判断那些用户对这些消息有权限(如果是一些平台性的消息是推送所有用户,如果是和容器相关的一些消息 [如流程告警、作业报错、自定义消息],则只推送对容器所属工程有权限的用户组的用户)且在Monitor中勾选了该消息的发送渠道;需要用户配置对应渠道的值(如手机号码和邮箱地址);需要用户配置对应的发送接口。
说的有点绕,总结一下:
1、产生了消息
2、用户对消息有权限
3、用户有配置邮箱(手机号)和勾选消息发送渠道
4、用户有发送邮件接口
本文主要就是写一个邮件发送接口,并演示一个实例给大家参考。
首先我们把发送接口分成两部分,用shell + python的方式来完成(只有一个也可以需要另外改造)。shell(sendemail.sh)主要用来完成对TASKCTL传参的解析和调用记录的存档,而python(sendemail.py)脚本就是一个根据参数发送邮件的程序(百度python发送邮件,很多相关例子,糅合了一些随便写了一个仅供参考)
sendemail.sh
#!/bin/sh #------------------------------------------------------------------------------ # 功能: 短信/邮件 发送程序 # 参数: # 1. channel 手机号码/邮箱地址 # 2. msg_file 消息内容临时文件全路径名称 # 说明: # 该程序每执行一次发送一条短信/一封邮件,并且不能死循环。发送完毕后必须退出 # 正常退出码应该为 4 #------------------------------------------------------------------------------ # 时间戳 Timestamp0=$(date +"%Y-%m-%d") Timestamp1=$(date +"%Y-%m-%d %H:%M:%S") # 参数判断,默认由TASKCTL在调用,肯定符合规范的,可以省略 if [ $# -ne 2 ] then echo "Param error !" echo "Usage: $0 channel msg_file" exit 126 fi # 参数保存和解析,第二个参数为临时文件,执行完即被删除,使用是需要读取出来 channel=$1 msg_file=$2 task_msg=$(cat ${msg_file}) log_file=${TASKCTLDIR}/log/sms_${Timestamp0}.txt # 记录调用日志 echo "${Timestamp1} : ${channel} ${msg_file}" >> ${log_file} echo "${task_msg}" >> ${log_file} echo "--------------------------------------" >> ${log_file} # 发送邮件 python ${TASKCTLDIR}/src/app/shell/sendemail.py ${channel} "${task_msg}" exit 4
python发送邮件的教程很多 我这个地方随便放一个163邮箱开启授权码并实现的链接供大家参考
https://blog.csdn.net/weixin_40475396/article/details/78693408
sendemail.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import smtplib from email.mime.text import MIMEText from email.header import Header # 接受参数 channel = sys.argv[1] task_msg = sys.argv[2] # 发件人设置 包括SMTP服务器地址/发件人邮箱地址/发件人邮箱密码(使用申请的客户端授权码代替) smtp_server = "smtp.163.com" from_addr = "xxxxx@163.com" passwd = "我是密码" # 收件人邮箱地址 to_addr = channel # 构建邮件内容(参数:邮件内容; 类型-plain,html; 编码) msg = MIMEText(task_msg,'plain','utf-8') #标题 msg["Subject"] = Header(u'TASKCTL邮件提醒', 'utf-8').encode() #发件人 msg["From"] = from_addr #收件人 msg["To"] = to_addr # 发送邮件函数 def send_email(): # 获取SMTP对象 server = smtplib.SMTP(smtp_server,25) # 如果是 ssl 通常是465端口 方法也不一样 server = smtplib.SMTP_SSL(smtp_server, 465) # 登录163邮箱服务器 server.login(from_addr,passwd) # 发送邮件 server.sendmail(from_addr,to_addr,msg.as_string()) # 退出邮箱服务器 server.quit() if __name__ == '__main__': send_email()
写完了后,可以先调试一下脚本python ,比如
python sendemail.py "131xxx@qq.com" "这是执行shell脚本时产生的测试正文"
如果能正常接收到邮件即表示成功,但有时候经常会报错 554 ,
smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp14,EsCowADntZqsE8pdEdZUHA--.48447S2 1573524396,please see http://mail.163.com/help/help_spam_16.htm?ip=222.211.207.183&hostid=smtp14&time=1573524396')
这个是因为你的邮件被判断为了垃圾邮件,可以访问一下这个地址看一下
######################################################################
在完成上述步骤后,我们就可以开始配置邮件并测试邮件功能了
1、首先新增用户组G_test对project1有所有权限,用户U_test属于G_test,并且配置上邮箱
把之前的两个脚本上传到TASKCTL服务端安装服务器的 $TASKCTLDIR/src/app/shell/ 目录下
完成后,我在Designer设计了一个子流程
然后用U_test用、U_test用户、U_test用户(重要的事情说三遍,每个用户只能管理自己订阅的消息) 登录Monitor
然后启动这个流程
我们看一下记录的日志文件
在看一下邮箱的邮件
[图片]
[图片]
[图片]
至此,我们完成了整个邮件配置的步骤
[最后编辑于 2019-11-13 10:04 ]
请登录后评论~