python爬取邮件内容_python 接收邮件获取邮件内容

收取邮件有两种协议,POP3和IMAP,POP3相对于IMAP功能较少无法对邮件进行更深层次的操作,因此本文使用IMAP协议收取邮件。python提供了很多收邮件的模块,本文使用imaplib来接收邮件。

前提

需要在邮件箱的设置中打开允许IMAP,不同邮件开启全方式不同,具体开启方式自行百度。(本文使用outlook,默认开启)

难点

获得邮件不难,难点是如何解析邮件的内容,由于邮件内容的编码是不固定的,因此编码格式的选择影响着解析邮件内容的正确性

代码

import imaplib , email , os

imapserver = 'outlook.office365.com'

emailuser = "bill@outlook.com"

emailpasswd = "billpasswd"

attachementdir=r"d:\a" #附件存放的位置

conn = imaplib.IMAP4_SSL(imapserver)

conn.login(emailuser,emailpasswd)

conn.list() #列出邮箱中所有的列表,如:收件箱、垃圾箱、草稿箱。。。

conn.select('INBOX') #选择收件箱(默认)

result , dataid = conn.uid ( 'search' , None , "ALL" )

mailidlist = dataid[0].split () #转成标准列表,获得所有邮件的ID

# 解析邮件内容

def get_body(msg):

if msg.is_multipart ():

return get_body ( msg.get_payload ( 0 ) )

else:

return msg.get_payload ( None , decode=True )

#search('FROM','abc@outlook.com',conn) 根据输入的条件查找特定的邮件

def search(key,value,conn):

result , data = conn.search(None,key,'"()"'.format(value))

return data

#获取附件

def get_attachements(msg):

for part in msg.walk():

if part.get_content_maintype() == 'multipart':

continue

if part.get('Content-Disposition') is None:

continue

filename = part.get_filename()

if bool(filename):

filepath = os.path.join(attachementdir,filename)

with open(filepath,'wb') as f:

f.write(part.get_payload(decode=True))

for id in mailidlist:

result , data = conn.fetch ( id , '(RFC822)' ) # 通过邮件id获取邮件

e = email.message_from_bytes ( data[0][1] )

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='utf-8' ) # utf-8 gb2312 GB18030解析中文日文英文

print("邮件内容是%s" % body)

conn.logout()

【问题】

一般utf-8可以解决大部分的邮件编码格式,若不能解析请使用其他编码。

【待改进】

email模块有一个获取邮件编码的方法,暂时未能找到

使用email提供的方法获取邮件编码,变可以解决所有邮件解析的问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值