📧 邮箱取件工具

🔑 卡密格式
Email----Password----RefreshToken----Client_ID
📧 获取邮件列表
https://mail.zhucn.org/web/邮箱地址----邮箱密码
📧 获取邮件详情
https://mail.zhucn.org/show_email/邮箱地址----邮箱密码/INBOX/邮件ID
🔐 OAuth2 登录
https://live.com/
📧 正在获取邮件列表...

Python IMAP 协议取件示例


import imaplib
import requests


def get_access_token(client_id, refresh_token):
    """获取访问令牌"""
    data = {
        "client_id": client_id,
        "grant_type": "refresh_token",
        "refresh_token": refresh_token,
    }
    response = requests.post("https://login.live.com/oauth20_token.srf", data=data)
    response.raise_for_status()

    token_data = response.json()
    access_token = token_data["access_token"]
    print(f"✅ 成功获取访问令牌: {access_token[:20]}...")
    return access_token


def generate_auth_string(user, token):
    """生成认证字符串"""
    auth_string = f"user={user}\1auth=Bearer {token}\1\1"
    return auth_string


def connect_imap(email, access_token):
    """连接 IMAP 服务器并获取邮件"""
    try:
        # 连接到 Outlook IMAP 服务器
        mail = imaplib.IMAP4_SSL("outlook.office365.com", 993)

        # OAuth2 认证
        auth_string = generate_auth_string(email, access_token)
        mail.authenticate("XOAUTH2", lambda x: auth_string)

        # 选择收件箱
        mail.select("INBOX")

        # 搜索所有邮件
        status, messages = mail.search(None, "ALL")
        mail_ids = messages[0].split()

        print(f"📧 找到 {len(mail_ids)} 封邮件")

        # 获取最新的几封邮件
        for mail_id in mail_ids[-5:]:  # 获取最新5封
            status, msg_data = mail.fetch(mail_id, "(RFC822)")
            print(f"📬 邮件 ID: {mail_id.decode()}")

        mail.logout()
        print("✅ IMAP 连接成功关闭")

    except Exception as e:
        print(f"❌ IMAP 连接失败: {str(e)}")


# 使用示例
if __name__ == "__main__":
    CLIENT_ID = "8b4ba9dd-3ea5-4e5f-86f1-ddba2230dcf2"
    EMAIL = "your-email@hotmail.com"  # 替换为您的邮箱
    REFRESH_TOKEN = "your_refresh_token_here"  # 替换为您的刷新令牌

    try:
        access_token = get_access_token(CLIENT_ID, REFRESH_TOKEN)
        connect_imap(EMAIL, access_token)
    except Exception as e:
        print(f"❌ 程序执行失败: {str(e)}")

Python POP3 协议取件示例


import base64
import poplib
import requests
import email
from email.header import decode_header


def get_access_token(client_id, refresh_token):
  """获取访问令牌"""
  data = {
      "client_id": client_id,
      "grant_type": "refresh_token",
      "refresh_token": refresh_token,
  }
  response = requests.post("https://login.live.com/oauth20_token.srf", data=data)
  response.raise_for_status()

  token_data = response.json()
  access_token = token_data["access_token"]
  print(f"✅ 成功获取访问令牌")
  return access_token


def generate_auth_string(user, token):
  """生成认证字符串"""
  auth_string = f"user={user}\1auth=Bearer {token}\1\1"
  return auth_string


def decode_subject(subject):
  """解码邮件主题"""
  decoded_parts = decode_header(subject)
  decoded_subject = ""
  for part, encoding in decoded_parts:
      if isinstance(part, bytes):
          decoded_subject += part.decode(encoding or "utf-8")
      else:
          decoded_subject += part
  return decoded_subject


def connect_pop3(email_addr, access_token):
  """连接 POP3 服务器并获取邮件"""
  try:
      # 连接到 Outlook POP3 服务器
      server = poplib.POP3_SSL("outlook.office365.com", 995)

      # OAuth2 认证
      auth_string = generate_auth_string(email_addr, access_token)
      encoded_auth_string = base64.b64encode(auth_string.encode("utf-8")).decode(
          "utf-8"
      )

      server._shortcmd("AUTH XOAUTH2")
      server._shortcmd(encoded_auth_string)

      # 获取邮件统计信息
      num_messages = len(server.list()[1])
      print(f"📧 收件箱共有 {num_messages} 封邮件")

      # 处理最新的几封邮件
      for i in range(min(3, num_messages)):  # 处理最新3封
          msg_num = num_messages - i  # 从最新开始
          response, lines, octets = server.retr(msg_num)

          # 解析邮件内容
          msg_content = b"\n".join(lines)
          msg = email.message_from_bytes(msg_content)

          # 获取邮件信息
          subject = decode_subject(msg.get("Subject", "无主题"))
          sender = msg.get("From", "未知发件人")
          date = msg.get("Date", "未知时间")

          print(f"\n📬 邮件 #{msg_num}")
          print(f"   主题: {subject}")
          print(f"   发件人: {sender}")
          print(f"   时间: {date}")
          print("-" * 50)

      server.quit()
      print("✅ POP3 连接成功关闭")

  except Exception as e:
      print(f"❌ POP3 连接失败: {str(e)}")


# 使用示例
if __name__ == "__main__":
  CLIENT_ID = "8b4ba9dd-3ea5-4e5f-86f1-ddba2230dcf2"
  EMAIL = "your-email@hotmail.com"  # 替换为您的邮箱
  REFRESH_TOKEN = "your_refresh_token_here"  # 替换为您的刷新令牌

  try:
      access_token = get_access_token(CLIENT_ID, REFRESH_TOKEN)
      connect_pop3(EMAIL, access_token)
  except Exception as e:
      print(f"❌ 程序执行失败: {str(e)}")