加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

利用IMAP协议读取邮件

发布时间:2021-04-03 11:08:02 所属栏目:动态 来源:互联网
导读:以上代码用来读取收件箱所有邮件的内容。 (1)M.select(INBOX)表示选择收件箱 如果换成读取Exchange的发件箱,对应的代码为M.select(Sent Items) 如果添加参数2为False,表示设置了只读标志,不允许修改邮箱,示例:M.select(Sent Items,False) (2)typ, data

以上代码用来读取收件箱所有邮件的内容。

(1)M.select('INBOX')表示选择收件箱

  •  如果换成读取Exchange的发件箱,对应的代码为M.select('"Sent Items"')
  •  如果添加参数2为False,表示设置了只读标志,不允许修改邮箱,示例:M.select('"Sent Items"',False)

(2)typ, data = M.search(None, 'ALL')中,None表示使用默认的ASCII编码,ALL表示搜索条件为所有邮件

  •  如果想要筛选出发件人为user2的邮件,对应语句为typ, msgnums = M.search(None, '(FROM "user2")')

M.search()返回的结果为邮件的序列号,例如我的测试环境下,收件箱有9个邮件,此时返回的结果为:

  • 里需要区分邮件序列号和UID
  •  邮件序列号为从1开始累加的数列,UID是区分邮件的唯一标识

获得邮件序列号同UID对应关系可使用以下代码:)M.fetch(num, '(RFC822)')用来提取邮件消息

  •  参数1num表示提取的邮件序列号
  •  参数1支持同时提取多个连续邮件消息,例如同时提取邮件序列号为2-5的邮件命令为M.fetch('2:5', '(RFC822)')
  •  参数2'(RFC822)'表示数据项名称,这里’(RFC822)’等同于BODY[],只返回邮件体文本格式和大小的摘要信息

如果只想获得邮件头部的内容,可以使用以下代码:

上代码用来保存收件箱所有邮件的附件

(1)msg = email.message_from_bytes(data[0][1])用来将数据转换为email对象

(2)msg.walk()用来遍历邮件对象的所有部分

(3)part.get('Content-Disposition')用来获得对应字段名Content-Disposition的字段值

如果邮件包含附件,将会带有字段Content-Disposition,通过这个判断邮件是否包含附件

(4)part.get_filename()用来获得信息头当中Content-Disposition字段当中名为filename的参数值,对应附件的名称

(5)part.get_payload(decode=True)用来获得附件内容

由于附件内容是以Base64编码的形式存储,所以在读取时需要加入参数decode=True作Base64解码。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读