Python如何提取邮件内容
今日分享主题:
如何使用Python从邮件里面提取用户返回的线上问题内容并做解析,通过拿到的数据信息进行分析整理,然后进行封装请求禅道里的接口进行提交,提交请求过程中会对数据库中是否存在进行一次判断处理,如果没有存在的就提交,如果数据库中存在就不用再提交,基于这个思路来看下今天的分享。
基础信息准备importimaplib,email,re,requests,time,pymysqlimapserversmtp。office365。comemailuserqa。noticeqq。comemailpasswdtest123beta环境禅道地址betaloginhosthttp:zen。beta。comindex。php?muserfloginbetaaddbughosthttp:zen。beta。comindex。php?mbugfcreateproductID10branch0extramoduleID0live环境禅道地址liveloginhosthttps:zen。live。comindex。php?muserfloginliveaddbughosthttps:zen。live。comindex。php?mbugfcreateproductID10branch0extramoduleID0envslive定义使用的环境
数据库连接信息连接数据库相关的信息:betadicts{HOST:10。8。2。3,PORT:3306,USER:zentao,PASSWORD:test123,NAME:zentao}livedicts{HOST:10。7。1。7,PORT:3306,USER:zentao,PASSWORD:test123,NAME:zentao}
数据库查询数据库查询操作defexecutesql(query,envs):try:if(envsbeta):connpymysql。connect(betadicts〔HOST〕,betadicts〔USER〕,betadicts〔PASSWORD〕,betadicts〔NAME〕,int(betadicts〔PORT〕),charsetutf8)print(betadicts)else:connpymysql。connect(livedicts〔HOST〕,livedicts〔USER〕,livedicts〔PASSWORD〕,livedicts〔NAME〕,int(livedicts〔PORT〕),charsetutf8)print(livedicts)cursorconn。cursor()cursor。execute(query)resultcursor。fetchall()print(executesuccessfully!!!)if(len(result)0):return0else:returnresult〔0〕〔0〕exceptExceptionase:print(e)print(executefailed)finally:cursor。close()conn。close()
建立连接与检索建立连接与检索匹配的邮件defsearch():print(starttoconnect)connimaplib。IMAP4SSL(imapserver)conn。login(emailuser,emailpasswd)conn。select(INBOX)选择收件箱(默认)print(conn)nowtime。localtime()nowttime。strftime(dbY,now)print(nowt)results,dataconn。search(None,(FROMLiang。Wu),(ONstr(nowt)))mailidlistdata〔0〕。split()print(mailidlist)try:foridinmailidlist:print(id)resultss,dataconn。fetch(id,(RFC822))通过邮件id获取邮件,data是fetch到的邮件具体内容eemail。messagefrombytes(data〔0〕〔1〕)
解释说明与printHeader()类:email。header。Header(sNone,charsetNone,maxlinelenNone,headernameNone,continuationws,errorsstrict)其中参数的含义理解如下:s:标头的值,也就是对应From、To、Subject的值;charset:字符集格式,默认是ASCII,但是一般指定UTF8格式以兼容更多字符;headername:标头名,就是From、To、Subject、Time等;subjectemail。header。makeheader(email。header。decodeheader(e〔SUBJECT〕))mailfromemail。header。makeheader(email。header。decodeheader(e〔From〕))print(邮件的subject是ssubject)print(邮件的发件人是smailfrom)bodystr(getbody(e),encodingISO88591)utf8gb2312GB18030解析中文日文英文print(邮件内容是sbody)parse1(body)print(goodjob)exceptExceptionase:print(wecatchanerror!!!,e)finally:print(logoutissuccess)print(thefinallyofoperation!!!)conn。logout()
获取邮件主体信息获取邮件主体信息defgetbody(msg):ifmsg。ismultipart():ReturnTrueifthemessage’spayloadisalistofsubMessageobjects,otherwisereturnFalse。Whenismultipart()returnsFalse,thepayloadshouldbeastringobject。returngetbody(msg。getpayload(0))else:Returnthecurrentpayload,whichwillbealistofMessageobjectswhenismultipart()isTrue,orastringwhenismultipart()isFalse。Ifthepayloadisalistandyoumutatethelistobject,youmodifythemessage’spayloadinplace。returnmsg。getpayload(None,decodeTrue)
解析邮件内容并提交禅道解析邮件内容并调用禅道提交(上一篇文章结合来看)defparse1(body):patternre。compile(DearColleagues,
(。?)ThanksandRegards,
,re。S)pattern1re。compile(black(。?)o:p,re。S)pattern2re。compile(;r(。?);r,re。S)listsre。findall(pattern,body)print(10)listsstr(lists〔0〕)。replace(,)。split(
)print(lists)resultlist〔〕foriinrange(len(lists)):if(len(lists〔i〕)1):resultlist。append(lists〔i〕)print(resultlist)idresultlist〔1〕idsstr(str(resultlist〔1〕)。split(:)〔1〕)。lstrip()Subjectresultlist〔2〕Subjects〔FeedBackstr(str(resultlist〔1〕)。split(:)〔1〕)。lstrip()〕str(str(resultlist〔2〕)。split(:)〔1〕)Creatorresultlist〔3〕Creatorsstr(str(resultlist〔3〕)。split(:)〔1〕)Categoryresultlist〔4〕IssueCategoryresultlist〔5〕if(Lowinresultlist〔6〕):Severity4SeveritydescSeverity:Low(Limitedbusinessimpact)if(Mediuminresultlist〔6〕):Severity3SeveritydescSeverity:Medium(Functionalbutimpactoperations)if(Highinresultlist〔6〕):Severity2SeveritydescSeverity:High(Majorsystemoutage)Moduleresultlist〔7〕if(blackinresultlist〔8〕ando:pinresultlist〔8〕):Detailsstr(re。findall(pattern1,resultlist〔8〕)〔0〕)。replace(,)if(;rinresultlist〔8〕and;rinresultlist〔8〕):Detailsstr(re。findall(pattern2,resultlist〔8〕)〔0〕)。replace(,)linkresultlist〔9〕stepsid
Subject
Creator
Category
IssueCategory
Severitydesc
Module
Details
linkprint(steps。replace(
,))sqlSELECTFROMztbugWHEREtitleLIKE〔FeedBackstr(ids)print(sql)if(executesql(sql,envs)1):print(thereisanrecordexists!!!)addbug(Subjects,Creators,Severity,steps,envs)else:addbug(Subjects,Creators,Severity,steps,envs)
提交bug至禅道提交bug到禅道的方法defaddbug(a,b,c,d,e):此方法可以与上一遍文章结合在一起提交到禅道pass
以上内容就是今天分享的全部内容,这个最后的方法也是空着的,所以这里也就回答了上一篇文章中大家提到的疑问自动提交bug到禅道的使用场景会是怎么样的。
iOS14。6RC版本发布,值得更新苹果在今天凌晨发布了iOS14。6RC版本,也就是纯正式版,如果没有意外,下周发布的版本应该和这个版本是一样的。iOS14。6RC版本更新了以下内容:1、苹果卡最多……
比亚迪将推低端电动车!明年初投产,计划月销5千辆,或8万起售网上车市从比亚迪内部获悉,比亚迪正在建设EM2E系列纯电动跨界车,新车尺寸与e2接近,但轴距更占优。该车系分为EK2EAEK2EB两个版本,百公里加速小于7。8秒。售价方面,参……
有谁知道狗狗币嘛?虚拟货币的一种,类似于比特币。由IBM工程师BillyMarkus基于Scrypt算法在2013年12月8日正式推出。其币面符号是一只Doge,起初只是作为比特币的……
国产iPhone13发布售价599元起步丨redmiK40宇虽然距离iPhone13系列发布还有四个多月的时间,但是相信大家现在对于新机的渲染图已经很熟悉了。不过近日国产手机厂商酷比推出了一款新机酷比X60Pro手机(vivo:???)……
什么是道?什么是空?什么是空性?霍金等科学家们认为,一个奇点的大爆炸产生了现在的宇宙。宇宙是物质的,那么这个奇点应该也是物质的。气球升空发生爆炸,爆炸的原因是气球外部气压接近于零,也就是气球外部接近真空……
柔宇科技斩获6亿元订单柔性屏模组大规模量产出货来源:读特近日,柔宇科技发布消息称,其获得一笔总计6亿元人民币的大额订单合同,根据协议,从2022年开始柔宇科技将向客户陆续提供柔性屏OLED显示模组,2年内完成全部订单……
梦想再被破灭,苹果依然拒绝京东方的OLED屏?这是为何?苹果仍旧不用京东方屏这件事儿,我是如此推测的:这件事上,苹果是主动方,因此苹果的态度才是关键。苹果虽然是一家在美国上市的公司,但苹果都能做出不让利润回到美国,就可以清楚它……
美又将黑手伸向中企?英媒美借国安名义调查阿里云来源:环球时报美又将黑手伸向中企?英媒:美国借国安名义调查阿里云【环球时报报道】美国政府把黑手伸向阿里云?英国路透社18日报道称,美国政府正在审查中国电子商务巨头阿里巴巴……
SaaS软件是什么软件?云服务已经快成为一个家喻户晓的词了,很多上市公司都已经进入云业务领域,而互联网龙头企业阿里和腾讯,乃至其他领域巨头华为、中国中信等也早早在这领域布下重兵。但是现在人们对于云服务……
总裁价到,一分钟送一台红米Note10,米粉有福了今天我的朋友圈被不少6。1儿童节刷屏了,当然了这是女孩子的朋友圈;而男孩子的朋友圈则不同,要么是数码大件的入手,要么就是发一些战报。而其中最让我感觉到意外的是小米,在6。1开门……
加码游戏赛道小米新品手机今日开售来源:人民网人民网北京2月18日电(记者夏晓伦)近年来,各手机厂商加码游戏赛道的趋势越来越明显。记者从小米集团举办的新品发布会上获悉,RedmiK50电竞版冠军版手机及R……
斯柯达放弃插电混动,混动技术路线再成电气化转型分歧焦点因技术路线的博弈,在中国市场日渐式微的斯柯达再次成为舆论焦点。日前,大众汽车集团旗下斯柯达公布其新战略计划,称未来将减少对PHEV汽车的关注,转而向消费者提供更多的纯电动……