Python实现获取及时邮件的方法
这篇文章主要介绍了python编程实现及时获取新邮件的方法,涉及python实时查询邮箱及邮件获取相关操作技巧,需要的朋友可以参考下
本文实例讲述了Python编程实现及时获取新邮件的方法。分享给大家供大家参考,具体如下:
#-*- encoding: utf-8 -*-import sysimport localeimport poplibfrom email import parserimport emailimport stringimport mysql.connectorimport tracebackimport datetimefrom mysql.connector import errorcodeimport timeimport rereload(sys);sys.setdefaultencoding('utf8');# 确定运行环境的encoding__g_codeset = sys.getdefaultencoding()if "ascii"==__g_codeset: __g_codeset = 'utf8';#def object2double(obj): if(obj==None or obj==""): return 0 else: return float(obj) #end if#def getMailIndex(): file = open('mailindex.txt',"r"); lines = file.readlines(); file.close(); return int(lines[0]);#def setMailIndex(index): f = open('mailindex.txt', 'w'); f.write(index); f.close();#def utf8_to_mbs(s): return s.decode("utf-8").encode(__g_codeset)#def utf8_to_gbk(s): return s.decode("utf-8").encode('gb2312')#def mbs_to_utf8(s): return s.decode(__g_codeset).encode("utf-8")#def gbk_to_utf8(s): return s.decode('gb2312').encode("utf-8")#def _queryQuick(cu,sql,tuple): try: cu.execute(sql,tuple); rows = [] for row in cu: rows.append(row) # return rows except: print(traceback.format_exc()) #end##获取信息def _queryRows(cu,sql): try: cu.execute(sql) rows = [] for row in cu: rows.append(row) # return rows except: print(traceback.format_exc()) #end##是否有新邮件global hasNewMail;hasNewMail=True;#全局已读的邮件数量global globalMailReaded;globalMailReaded=getMailIndex()+1;#获取新邮件def getNewMail(conn2,cur2): try: global hasNewMail; global globalMailReaded; conn2.commit(); rows=_queryRows(cur2,"select count(*) as message_count from hm_messages where messageaccountid=1"); message_count=rows[0][0]; if(hasNewMail): print('read mailindex.txt') globalMailReaded=getMailIndex()+1; #end if if(message_count> f, "Date: ", message["Date"] #print >> f, "From: ", email.utils.parseaddr(message.get('from'))[1] #print >> f, "To: ", email.utils.parseaddr(message.get('to'))[1] #print >> f, "Subject: ", subject j = 0 for part in message.walk(): j = j + 1 fileName = part.get_filename() contentType = part.get_content_type() mycode=part.get_content_charset(); # 保存附件 if fileName: pass; elif contentType == 'text/plain':# or contentType == 'text/html': #保存正文 data = part.get_payload(decode=True) content=str(data); if mycode=='gb2312': content= gbk_to_utf8(content) #end if content=content.replace(u'u200d',''); setMailIndex(str(globalMailReaded)); hasNewMail=True; pop_conn.quit(); return (content,email.utils.parseaddr(message.get('from'))[1]); #end if #end for except: print("search hmailserver fail,try again"); return None; finally: pass; #end try#end def#连接数据库conn2 = mysql.connector.connect(user='root', password='password',host='127.0.0.1',database='hmailserver',charset='gb2312');cur2 = conn2.cursor();#只要收到电子邮件,就把这个事件记录在事件库中#现在就是循环查询邮箱,如果有新邮件就读取,并查询关键词库while(True): mailtuple=getNewMail(conn2,cur2); if(mailtuple==None): #print('Did not search MySQL,continue loop...') time.sleep(0.5) continue; #end if (article,origin)=mailtuple;#end while