公司服务器之前发生过一次硬件故障,所以打算通过imm自带的报警来做个监控.
结果发现一个坑爹的事情,配置了腾讯的smtp地址,用户信息都是对的,死活发送不出来测试邮件,排除了服务器的网络原因后,我陷入了深深的沉思中……
无奈,抓包看了下,ibm的imm邮件程序把邮件的发送改为了他自己的一串代码,导致腾讯邮箱的用户验证失败.
思考着用python做个转发吧,几行代码就可以搞定了
import smtpd
import mailx
import wechat
import asyncore
import re
maillist = "[email protected]" #这里填写邮件真实发送的地址,多个用逗号隔开
pattern = re.compile(r'Subject:(.*)',re.I) #这里提取原始邮件的标题
pn = re.compile(r'[Ss]ubject:.*',re.S) #这里提取原始邮件的内容
class CustomSMTPServer(smtpd.SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data):
try:
s = pattern.findall(data)[0]
if 'WAF' in s:
subject = s
else:
subject = "imm_alarm_" + s
content = pn.findall(data)[0]
except:
subject = "imm_alarm_null"
content = data
mailx.mailalarm(maillist,subject,content) #这里是用自己封装的邮件脚本发送邮件
wechat.senddata("xxxx",subject,content) #这里是用自己封装的企业微信发送出去
return
if __name__ == '__main__':
server = CustomSMTPServer(('192.168.64.65', 25), None)
asyncore.loop()
只需要在imm的报警邮件发送设置里面,配置smtp服务器为192.168.64.65,然后用户/密码不填(如果必填的就随便填) ,当服务器有需要告警的信息,则邮件内容会首先到我搭建的邮件服务器上,然后会转发给配置好的邮件&微信, 至此, 问题解决, hoho!