Py-imaplib读取163邮箱

该代码示例展示了如何使用Python的imaplib库连接并登录163邮箱,通过IMAP4_SSL协议处理UnsafeLogin问题,然后选择邮箱的收件箱并设置为只读模式。接着,它搜索并按时间降序获取邮件ID,读取邮件内容,包括提取邮件主题,处理邮件附件,并对文本内容进行解码和HTML标签过滤。此外,代码还提供了保存附件和发送钉钉通知的功能。
摘要由CSDN通过智能技术生成

Py-imaplib读取163邮箱

  • 引入包
# -*- coding: utf-8 -*-
import os
import email
import imaplib
import quopri
import datetime
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse
from optparse import OptionParser
import re
  • 链接邮箱
    def login(self):
        imap_server = imaplib.IMAP4_SSL(self.host)
        imap_server.login(self.account, self.password)
        # 解决网易邮箱报错:Unsafe Login. Please contact xxx@163.com for help
        imaplib.Commands["ID"] = ('AUTH',)
        args = ("name", self.account, "contact", self.account, "version", "1.0.0", "vendor", "myclient")
        imap_server._simple_command("ID", str(args).replace(",", "").replace("\'", "\""))
        return imap_server
  • 通过select选中邮箱,注意如果仅读取邮件内容,不改变邮件未读属性,设置readonly=True。该属性默认为False,读取内容后会将邮件设置为已读。
self.imap_server.select(mailbox='INBOX', readonly=True)
  • 通过search获取邮件ID列表,默认邮件接收时间排序是由远到近。
self.imap_server.search(None, message_type)
  • 通过reversed倒排邮件ID循环fetch读取,获取的邮件内容需要处理,通过email获取邮件可读内容。
 for message_index in reversed(items[0].split()):
            msg_data = Message()
            fetch_status, message = self.imap_server.fetch(message_index, "(RFC822)")
            msg = email.message_from_bytes(message[0][1])
  # walk读取邮件主题,获取附件、主体
  for part in msg.walk():
            if not part.is_multipart():
                content_type = part.get_content_type()
                filename = part.get_filename()
                # 是否有附件
                if filename:
                    file_header = email.header.Header(filename)
                    decode_header = email.header.decode_header(file_header)
                    file_name = decode_header[0][0]
                    data = part.get_payload(decode=True)
                    try:
                        print('Attachment : ' + file_name)
                        # 保存附件
                        if file_name:
                            save_file(file_name, data, save_path)
                            files.append(file_name)
                    except:
                        print(file_name)

                else:
                    if content_type in ['text/plain']:
                        suffix = '.txt'
                    if content_type in ['text/html']:
                        suffix = '.htm'
                    if part.get_charsets() is None:
                        message_content = part.get_payload(decode=True)
                    else:
                        message_content = part.get_payload(decode=True).decode(part.get_charsets()[0])
  • 完整代码
# -*- coding: utf-8 -*-
import os
import email
import imaplib
import quopri
import datetime
import r
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值