🔑 卡密格式
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)}")