之前给大家介绍使用python去发送邮件了,那有小伙伴提出疑问了,既然能发送,能否读取呢?如果可以用python实现,那将是个非常有趣的事情,于是小编也去查询了下,下面就给大家演示下,都来看看吧~以下是具体实现内容,内容非常充分,请仔细阅览。
关于读取邮件:
收取邮件使用POP3协议;
解析邮件:需要将收取的邮件转化为email.message.Message对象,再使用email模块解析内容。
读取邮件的实例
1、获取某封邮件的对象
importpoplibfromemail.parserimportParser"""POP的服务器信息"""popHost="pop.exmail.qq.com"userAdr="xx@xx.cn"userPwd="xxxxx" """创建POP3对象,添加用户名和密码"""pop3Server=poplib.POP3(popHost)pop3Server.user(userAdr)pop3Server.pass_(userPwd) """获取邮件数量和占用空间"""messageCount,mailboxSize=pop3Server.stat """获取邮件请求返回状态码、每封邮件的字节大小(b'第几封邮件此邮件字节大小')、"""response,msgNumOctets,octets=pop3Server.list """获取任意一封邮件的邮件对象【第一封邮件的编号为1,而不是0】"""msgIndex=random.randint(1,messageCount)print(msgIndex)#获取第msgIndex封邮件的信息response,msgLines,octets=pop3Server.retr(msgIndex)#msgLines中为该邮件的每行数据,先将内容连接成字符串,再转化为email.message.Message对象msgLinesToStr=b"\r\n".join(msgLines).decode("utf8","ignore")messageObject=Parser.parsestr(msgLinesToStr)print(messageObject) """终止POP3服务"""pop3Server.quit
2、解析邮件对象
3、获取邮件日期
msgDate=messageObject["date"]print(msgDate)
4、获取邮件发件人实名、邮箱地址
获取邮件实名时,名称一般是加密的,此时就需要对头文件进行解码才可获取它的实际内容
fromemail.headerimportdecode_headerdefdecodeMsgHeader(header):"""解码头文件:paramheader:需解码的内容:return:"""value,charset=decode_header(header)[0]ifcharset:value=value.decode(charset)returnvalue fromemail.utilsimportparseaddrsenderContent=messageObject["From"]#parseaddr函数返回的是一个元组(realname,emailAddress)senderRealName,senderAdr=parseaddr(senderContent)#将加密的名称进行解码senderRealName=decodeMsgHeader(senderRealName)print(senderRealName)print(senderAdr)
5、获取邮件主题
获取的邮件的主题也是加密的,此时就需要对头文件进行解码才可获取它的实际内容。
msgHeader=messageObject["Subject"]#对头文件进行解码msgHeader=decodeMsgHeader(msgHeader)print(msgHeader)
6、获取邮件正文
一封邮件的正文内容,可能是由几部分构成,每部分的格式不同。
"""获取邮件正文内容"""msgBodyContents=ifmessageObject.is_multipart:#判断邮件是否由多个部分构成messageParts=messageObject.get_payload#获取邮件附载部分formessagePartinmessageParts:bodyContent=decodeBody(messagePart)ifbodyContent:msgBodyContents.append(bodyContent)else:bodyContent=decodeBody(messageObject)ifbodyContent:messageBodyContents.append(bodyContent)print(msgBodyContents) defdecodeBody(msgPart):"""解码内容:parammsgPart:邮件某部分"""contentType=msgPart.get_content_type#判断邮件内容的类型,text/htmltextContent=""ifcontentType=='text/plain'orcontentType=='text/html':content=msgPart.get_payload(decode=True)charset=msgPart.get_charsetifcharsetisNone:contentType=msgPart.get('Content-Type','').lowerposition=contentType.find('charset=')ifposition>=0:charset=contentType[position+8:].stripifcharset:textContent=content.decode(charset)returntextContent
以上就是关于python邮件获取内容了,如需了解更多python实用知识,点击进入PyThon学习网教学中心。