几行python代码搭建邮件服务器 转发邮件

公司服务器之前发生过一次硬件故障,所以打算通过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!