這篇文章主要介紹了Python編程實現及時獲取新郵件的方法,涉及Python實時查詢郵箱及郵件獲取相關操作技巧,需要的朋友可以參考下
本文實例講述了Python編程實現及時取得新郵件的方法。分享給大家參考,具體如下:
#-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string import mysql.connector import traceback import datetime from mysql.connector import errorcode import time import re reload(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<=globalMailReaded): hasNewMail=False; #print('Did not receive new mail,continue wait...') return None;#没新邮件,直接返回 #end if #登陆邮箱 host = '127.0.0.1' username = 'username@myserver.net' password = 'password' pop_conn = poplib.POP3(host) #print pop_conn.getwelcome() pop_conn.user(username); pop_conn.pass_(password); #Get messages from server: messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)] # Concat message pieces: messages = ["\n".join(mssg[1]) for mssg in messages] #Parse message intom an email object: messages = [parser.Parser().parsestr(mssg) for mssg in messages] print("get new mail!"); print pop_conn.stat() print('%s readed mail count is %d,all mail count is: %d'%(datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S"),globalMailReaded,len(messages))) message = messages[globalMailReaded]; subject = message.get('subject') h = email.Header.Header(subject) dh = email.Header.decode_header(h) #subject = unicode(dh[0][0], dh[0][1]).encode('utf8') #print >> 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
以上是Python實現獲取及時郵件的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器