范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python如何提取邮件内容

  今日分享主题:
  如何使用 Python 从邮件里面提取用户返回的线上问题内容并做解析,通过拿到的数据信息进行分析整理,然后进行封装请求禅道里的接口进行提交,提交请求过程中会对数据库中是否存在进行一次判断处理,如果没有存在的就提交,如果数据库中存在就不用再提交,基于这个思路来看下今天的分享。
  基础信息准备   import imaplib, email,re,requests,time,pymysql imapserver = "smtp.office365.com" emailuser = "qa.notice@qq.com" emailpasswd = "test123"   #beta环境禅道地址 beta_loginhost="http://zen.beta.com/index.php?m=user&f=login" beta_add_bughost="http://zen.beta.com/index.php?m=bug&f=create&productID=10&branch=0&extra=moduleID=0"   #live环境禅道地址 live_loginhost="https://zen.live.com/index.php?m=user&f=login" live_add_bughost="https://zen.live.com/index.php?m=bug&f=create&productID=10&branch=0&extra=moduleID=0"   envs="live" #定义使用的环境
  数据库连接信息   #连接数据库相关的信息: beta_dicts={  "HOST" : "10.8.2.3",  "PORT" : 3306,  "USER": "zentao",  "PASSWORD" : "test123",  "NAME":"zentao" } live_dicts={  "HOST" : "10.7.1.7",  "PORT" : 3306,  "USER": "zentao",  "PASSWORD" : "test123",  "NAME":"zentao" }
  数据库查询   #数据库查询操作 def executesql(query,envs):  try:  if(envs=="beta"):  conn = pymysql.connect(beta_dicts["HOST"], beta_dicts["USER"], beta_dicts["PASSWORD"], beta_dicts["NAME"], int(beta_dicts["PORT"]),charset="utf8")  print(beta_dicts)  else:  conn = pymysql.connect(live_dicts["HOST"], live_dicts["USER"], live_dicts["PASSWORD"], live_dicts["NAME"], int(live_dicts["PORT"]),charset="utf8")  print(live_dicts)  cursor = conn.cursor()  cursor.execute(query)  result =cursor.fetchall()  print("execute successfully!!!")  if(len(result)==0):  return 0  else:  return result[0][0]  except Exception as e:  print(e)  print("execute failed")  finally:  cursor.close()  conn.close()
  建立连接与检索   #建立连接与检索匹配的邮件 def search():  print("start to connect")  conn = imaplib.IMAP4_SSL(imapserver)  conn.login(emailuser, emailpasswd)  conn.select("INBOX") # 选择收件箱(默认)  print(conn)  now = time.localtime()  nowt = time.strftime("%d-%b-%Y", now)  print(nowt)  results , data = conn.search(None,"(FROM "Liang.Wu")","(ON ""+str(nowt)+"")")  mailidlist = data[0].split()  print(mailidlist)  try:  for id in mailidlist:  print(id)  resultss, data = conn.fetch(id, "(RFC822)") # 通过邮件id获取邮件,data是fetch到的邮件具体内容  e = email.message_from_bytes(data[0][1])
  解释说明与print    """  Header()类:  email.header.Header(s=None, charset=None, maxlinelen=None, header_name=None, continuation_ws=" ", errors="strict")  其中参数的含义理解如下:  s:标头的值,也就是对应 From、To、Subject 的值;   charset:字符集格式,默认是 ASCII,但是一般指定 UTF-8 格式以兼容更多字符;   header_name:标头名,就是 From、To、Subject、Time 等;  """  subject = email.header.make_header(email.header.decode_header(e["SUBJECT"]))  mail_from = email.header.make_header(email.header.decode_header(e["From"]))  print("邮件的subject是%s" % subject)  print("邮件的发件人是%s" % mail_from)  body = str(get_body(e), encoding="ISO-8859-1") # utf-8 gb2312 GB18030解析中文日文英文  print("邮件内容是%s" % body)  parse1(body)  print("good job")  except Exception as e:  print("we catch an error!!!",e)  finally:  print("logout is success")  print("the finally of operation!!!")  conn.logout()
  获取邮件主体信息   #获取邮件主体信息 def get_body(msg):  if msg.is_multipart ():#Return True if the message’s payload is a list of sub-Message objects, otherwise return False. When is_multipart() returns False, the payload should be a string object.  return get_body(msg.get_payload(0))  else:  """Return the current payload, which will be a list of Message objects when is_multipart() is True,   or a string when is_multipart() is False. If the payload is a list and you mutate the list object,  you modify the message’s payload in place."""  return msg.get_payload(None , decode=True)
  解析邮件内容并提交禅道   # 解析邮件内容并调用禅道提交(上一篇文章结合来看) def parse1(body):  pattern = re.compile("Dear Colleagues,
  (.*?)Thanks and Regards,
  ", re.S)  pattern1 = re.compile("black">(.*?)", re.S)  pattern2=re.compile(";">r(.*?);r<",re.S)  lists = re.findall(pattern, body)  print("*"*10)  lists = str(lists[0]).replace(" ", "").split("
  ")  print(lists)  resultlist = []  for i in range(len(lists)):  if (len(lists[i]) > 1):  resultlist.append(lists[i])  print(resultlist)  id = resultlist[1]  ids=str(str(resultlist[1]).split(":")[1]).lstrip()  Subject = resultlist[2]  Subjects="[FeedBack-"+str(str(resultlist[1]).split(":")[1]).lstrip() + "]--"+str(str(resultlist[2]).split(":")[1])  Creator = resultlist[3]  Creators = str(str(resultlist[3]).split(":")[1])  Category = resultlist[4]  IssueCategory = resultlist[5]  if ("Low" in resultlist[6]):  Severity = "4"  Severity_desc = "Severity: Low (Limited business impact)"  if ("Medium" in resultlist[6]):  Severity = "3"  Severity_desc = "Severity: Medium (Functional but impact operations)"  if ("High" in resultlist[6]):  Severity = "2"  Severity_desc = "Severity: High (Major system outage)"  Module = resultlist[7]  if("black">" in resultlist[8] and "" in resultlist[8]):  Details = str(re.findall(pattern1, resultlist[8])[0]).replace(""", """)  if(";">r" in resultlist[8] and ";r<" in resultlist[8]):  Details = str(re.findall(pattern2, resultlist[8])[0]).replace(""", """)  link = resultlist[9]  steps = id + "
  " + Subject + "
  " + Creator + "
  " + Category + "
  " + IssueCategory + "
  " + Severity_desc + "
  " + Module + "
  " + Details + "
  " + link  print(steps.replace("
  ", " "))  sql="SELECT * FROM zt_bug WHERE title LIKE "[FeedBack-"+str(ids)+"%""  print(sql)  if(executesql(sql,envs)>=1):  print("there is an record exists!!!")  #add_bug(Subjects, Creators, Severity, steps,envs)  else:  add_bug(Subjects,Creators,Severity,steps,envs)
  提交bug至禅道   #提交bug到禅道的方法 def add_bug(a,b,c,d,e): #此方法可以与上一遍文章结合在一起提交到禅道  pass
  以上内容就是今天分享的全部内容,这个最后的方法也是空着的,所以这里也就回答了上一篇文章中大家提到的疑问—->自动提交bug到禅道的使用场景会是怎么样的。

vivoY32正式发布骁龙6805000mAh电池,1399元IT之家12月18日消息,vivoY32现已登陆vivo官网,搭载骁龙680处理器,内置5000mAh电池,8GB128GB售价1399元,目前尚未正式开售。设计方面,vivoY3京东金融可靠吗?京东金融非常可靠!首先来看一下京东金融的介绍!京东金融集团创立于京东集团内部,于2013年10月开始独立运营,定位一家数字科技公司。公司以大数据人工智能物联网区块链等时代前沿技术为人工智能热为何在中职遇冷?刍议中职开设人工智能专业的误区人工智能并不是一门独立的学科,仅是计算机科学学科应用技术中的一个分支(根据美国教授内尔黛尔,约翰路易斯所著的计算机科学概论和美国教授贝赫鲁兹佛罗赞所著的计算机科学导论观点),但人工大家服吗?vivoX70Pro成年度最佳影像旗舰伴随着年关的临近各大平台已经开始对2021年进行回顾评比。这个在智能手机行业非常的流行,每年这个时候各大平台包括媒体都会评选出自己心目中的最佳。今天我们给大家解析的是新浪财经新浪科12。20号新能源车光伏半导体券商5g等板块与周一大盘的具体分析多领域学习,顺势而为!给你小心心走势预测从上周五走势上来看,主要受到了外围市场的影响以及对假北水的一个承压短期已经释放了较多的压力,形成了一个高开低走的趋势为主。从60分钟级别上来34家中企被拉入清单,任正非果然有远见在美国实施芯片禁令之初,比尔盖茨这些大佬就发出警告不卖给中国芯片只会加速他们实现自给自足的步伐,最终受到损失的只会是以出口为主的美半导体市场。而事实也的确如此,国内市场制定了202golangciline工具介绍在ci过程中,经常有一些可以通过静态分析或者白盒检测去避免一些问题以及规范代码格式!使用Go语言一般是使用golangciline作为代码检测工具!1安装参考官网httpsgola小米开始发力外观设计,这两款机型让你爱上它小米手机10年走来,外观设计一直不是他主攻的方向,硬件才是他的主力军,但是这半年来小米在设计上下足了功夫,诚意满满,今天我们就特别要说的两款机型就是小米11青春活力板和小米Civi起售不到20万!一汽大众ID。4CROZZ值不值作为走在风口浪尖的新能源车型,在疫情之下的2020年还是取得了不错的成绩,自主品牌以及造车新势力品牌可以说表现抢眼,不过随着特斯拉国产车型价格的下放以及合资品牌的入局,这一市场势必iPhone13mini值得购买吗?用了iPhone13mini的体验来说,这部手机还算完美吧。如果非说有什么缺点的话,那就是摄像头,苹果把摄像头搞那么大干什么,你就弄一个单摄做的和背板水平不就得了。真的,好的摄像模为什么有人宁愿溢价买华为,也不考虑性价比高的小米?三点原因今天来聊聊为什么有人宁愿溢价买华为,也不考虑性价比高的小米?首先,性价比并不是单一的便宜,而是好且便宜。而一直以来小米做得更多的是便宜而不是性价比。比如小米的家电,第一年好用,第二
相机资料大全毒镜老相机资料共享库为了方便资料整理及共享,我将最近的相机说明书,资料都共享到了百度网盘,以后的资料都会不定期的上传上去,方便大家下载和查询。目前主要资料为,放大镜头速查手册,冲洗资料库,以及相机说明最新编程语言排行数据更新!Python要登顶了?前两天,TIOBE公布了2021年9月的编程语言排行榜。TIOBE编程社区索引是编程语言流行程度的一个指标,数据来源谷歌亚马逊YouTube百度等搜索引擎,指标可供程序员检验当前所大画幅相机漂流(上海第一站)午夜兰花拿着单轨大画幅去扫街文章来自微信订阅号F64生产社4台大画幅复古相机1次相机在城市间漂流的故事Z世代下,607080后的声响他们用自己的方式在这个时代留下印记关于这场旅行的故事你我一起见证上海站午夜兰Oracle稳坐第一,MySQL穷追不舍,10月数据库排行榜出炉近日,DBEngines发布了10月份的数据库排名,网站是根据数据库管理系统当前的流行程度进行排名,排名每月更新一次。DBEngins排名标准主要是通过调研这些数据库在搜索引擎(谷论男性如何保护好自己最近在网上看到阿里女员工遭性侵,吴亦凡涉嫌强奸被捕,还有最近据传天天向上主持人钱枫被人举报性侵等等这些事件不仅让我想到一个问题那就是男性在生活还是职场中该如何保护好自己,不能让肾上明确了,不办5G套餐也能使用5G4G套餐平滑上5G,享受300兆速率网速(300兆除以8,真实网速每秒能达到37。5兆)。12日,据工信部微信公众号工信微报转载的图解显示若您现在使用的是4G套餐,只要您的5G手机教你如何判断自己接入的5G是NSA还是SA本文以华为或者荣耀手机为例1。设备支持(1)手机要打开对应的设置,5G开关。(2)进入开发人员选项,选择SANSA模式。2。套餐支持移动SA为自动开通,联通电信要系统自动开通或者打你测网速使用什么app呢?现在测网速的app越来越多,你经常使用哪一款呢?本期主要讲解一款测速软件(Speedtest),稍微解释下对应的参数说明。1。speedtest该软件,打开会根据定位选择离你最近的教你查询移动联通电信5G覆盖范围1。查询覆盖要下载对应的运营商app有手机应用商店的直接搜索下载,没有的话去某度搜下2。打开应用(1)中国移动app点击5G专区点击5G网络覆盖点击定位有需要注意的地方,最后再统一鸿星尔克突然就火了前段时间河南省因特大暴雨引发洪涝灾害,导致人员和财产的损失不可估量,众多热心人士以及企业纷纷为之捐款,当然小的也捐了一笔款,也就是在这个时候企业的捐款还有个人的捐款陆陆续续以各种形指数基金投资指南读书笔记2第二章。投资工具这么多,为什么要选择指数基金指数的概念一种选股的规则。反映一篮子股票的平均价格走势指数基金的优势A。寿命比一般股票存活时间长(公司会倒闭的嘛)B。长期上涨C。交易成