栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

邮件接收(IMAP)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

邮件接收(IMAP)

接收邮件
  • 日志模块: 日志
# -*- coding:utf-8 -*-
from imapclient import IMAPClient
from log import Log
log = Log()
log = log.log()


class ImapMethod:
    def __init__(self, host, port, username, password):
        self.host = host            # 主机
        self.port = port            # 端口
        self.username = username    # 账号
        self.password = password    # 密码
        self.conn = None            # 连接

    def client(self, is_ssl=True):
        """连接服务器"""
        try:
            self.conn = IMAPClient(host=self.host, port=self.port, ssl=is_ssl)
            # self.conn.search()
            log.info("[邮箱] 连接服务器")
        except Exception as e:
            log.error("[邮箱] 连接服务器 失败 {}".format(e))
            raise e

    def login(self):
        """登录"""
        try:
            self.conn.login(self.username, self.password)
            self.conn.id_({"name": "IMAPClient", "version": "2.2.0"})  # 解决 Unsafe Login 问题
            log.info("[邮箱] 登录")
        except Exception as e:
            log.error("[邮箱] 登录 失败 {}".format(e))
            raise e

    def logout(self):
        """登出"""
        try:
            self.conn.logout()
            log.info("[邮箱] 登出")
        except Exception as e:
            log.error("[邮箱] 登出 失败 {}".format(e))
            raise e

    def list_folders(self, mailbox="INBOX"):
        """列出目录下所有文件夹"""
        try:
            mailboxes = [box for *_, box in self.conn.list_folders(mailbox)]
            log.info("[邮箱] 列出所有文件夹: {}".format(mailboxes))
            return mailboxes
        except Exception as e:
            log.error("[邮箱] 列出所有文件夹 失败 {}".format(e))
            raise e

    def select_folder(self, mailbox="INBOX"):
        """进入文件夹"""
        try:
            self.conn.select_folder(mailbox)
            log.info("[邮箱] 进入文件夹")
        except Exception as e:
            log.error("[邮箱] 进入文件夹 失败 {}".format(e))
            raise e

    def search(self, start_date=None, final_date=None, from_mail=None):
        """
        查找邮件
        :param start_date: 开始日期, 09-Sep-2021
        :param final_date: 结束日期
        :param from_mail: 来源邮箱
        :return: 符合条件的邮件 uid
        """
        try:
            search_criteria = []
            if start_date:
                search_criteria.extend(['SINCE', start_date])
            if final_date:
                search_criteria.extend(['BEFORE', final_date])
            if from_mail:
                search_criteria.extend(['FROM', from_mail])
            uid = self.conn.search(search_criteria)
            log.info("[邮箱] 查找邮件")
            return uid
        except Exception as e:
            log.error("[邮箱] 查找邮件 失败 {}".format(e))
            raise e


if __name__ == '__main__':
    config = {
        "host": "imap.163.com",
        "port": 993,  # 143 | 993
        "username": "xxx@163.com",
        "password": "xxx"
    }
    email = ImapMethod(**config)
    email.client()
    email.login()
    mbs = email.list_folders()
    email.select_folder(mbs[0])
    uid = email.search(from_mail="xxx@mail.com")
    print(uid)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/280441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号