侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

邮件报警转换器

2023-05-07 星期日 / 0 评论 / 0 点赞 / 86 阅读 / 2688 字

我们公司买了一个短信平台,用来给各个信息系统发短信。用法是把短信内容和号码写到一个数据库里面。因为我们这边不少系统只支持邮件报警。今天闲着没事,就顺手写了一个转换器。python 下面有现成的smtp

.

我们公司买了一个短信平台,用来给各个信息系统发短信。用法是把短信内容和号码写到一个数据库里面。

因为我们这边不少系统只支持邮件报警。今天闲着没事,就顺手写了一个转换器。

python 下面有现成的smtpd框架,网上还能找到示例说明,实现一个smtp服务器非常容易。


#!/usr/bin/env pythonimport smtpd,asyncore,csv,datetimeimport pyodbc,MySQLdbclass Method(object):    def sendmessage(self,target,message):        passclass ToCSV(Method):    def __init__(self):        self._f=open('data.csv','wb')        self.sender=csv.writer(self._f)    def __del__(self):        self._f.close()    def sendmessage(self,target,message):        self.sender.writerow((target,message))class ToConsole(Method):    def sendmessage(self,target,message):        print('sending to %s/n'%target)        print('the message is %s/n'%message)class ToDB(Method):    def sendmessage(self,target,message):        with pyodbc.connect('DRIVER={SQL Server};SERVER=xxx.xxx.xxx.xxx;DATABASE=db;UID=usr;PWD=psw') as db:            cu=db.cursor()            cu.execute("INSERT INTO table (sendto,content) VALUES ('%s','%s')"%(target,message))#-------------------------------------------------------class MailServer(smtpd.SMTPServer):    def __init__(self,sendmethod=ToDB,host='',port=25):        self.sender=sendmethod()        self.usr_dict=self._loaddata()        smtpd.SMTPServer.__init__(self,(host,port),None)        print ('----------------server has been started---------------')                def process_message(self,peer,mailfrom,rcttos,data):        for rcpt in rcttos:            phone=self._getphone(rcpt.split('@')[0])            if phone is None:                continue            try:                self.sender.sendmessage(phone,data)            except:                print('%s:  %s sending message failed'%(str(datetime.datetime.now()),mailfrom.split('@')[0]))            def _loaddata(self):        db=MySQLdb.connect('xxx.xxx.xxx.xxx','usr','psw','db')        cu=db.cursor()        cu.execute("SELECT USER_ID, PHONE FROM table")        result=cu.fetchall()        db.close()        return dict(result)    def _getphone(self,usr):        if self.usr_dict.has_key(usr):            return self.usr_dict[usr]        else:            return None#---------------------------------------------------------def loop():    server=MailServer()    try:        asyncore.loop(timeout=2)    except KeyboardInterrupt:        print('-------------server stop------------------')        server.close()if __name__=='__main__':    loop()


.

广告 广告

评论区