Python编程实现及时获取新邮件的方法示例


Posted in Python onAugust 10, 2017

本文实例讲述了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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python函数返回多个值的示例方法
Dec 04 Python
Python中is与==判断的区别
Mar 28 Python
Sanic框架配置操作分析
Jul 17 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
python help函数实例用法
Dec 06 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 #Python
Python基础之getpass模块详细介绍
Aug 10 #Python
Python中字典(dict)合并的四种方法总结
Aug 10 #Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 #Python
Python 操作文件的基本方法总结
Aug 10 #Python
Python 模拟登陆的两种实现方法
Aug 10 #Python
Python 网页解析HTMLParse的实例详解
Aug 10 #Python
You might like
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
python 的列表遍历删除实现代码
2020/04/12 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Python如何定义接口和抽象类
2020/07/28 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
党风廉政承诺书
2014/03/27 职场文书
实习单位证明范例
2014/11/17 职场文书
青年志愿者活动感想
2015/08/07 职场文书
股东出资协议书
2016/03/21 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python