本文目录导读:

Python + Gmail API(最推荐)
import os
import pickle
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
def check_new_emails():
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('gmail', 'v1', credentials=creds)
# 检查未读邮件
results = service.users().messages().list(
userId='me',
q='is:unread',
maxResults=10
).execute()
messages = results.get('messages', [])
if messages:
print(f"你有 {len(messages)} 封新邮件")
for msg in messages[:5]: # 显示前5封
message = service.users().messages().get(
userId='me',
id=msg['id']
).execute()
headers = message['payload']['headers']
subject = next(h['value'] for h in headers if h['name'] == 'Subject')
from_addr = next(h['value'] for h in headers if h['name'] == 'From')
print(f"发件人: {from_addr}")
print(f"主题: {subject}")
print("-" * 50)
return len(messages)
if __name__ == "__main__":
new_count = check_new_emails()
Python + IMAP(更通用)
import imaplib
import email
from email.header import decode_header
import time
import os
def check_email_imap():
# 邮箱配置
IMAP_HOST = "imap.gmail.com" # 或你的邮箱IMAP服务器
IMAP_PORT = 993
USERNAME = "your_email@gmail.com"
PASSWORD = "your_password" # 建议使用应用专用密码
try:
# 连接IMAP服务器
mail = imaplib.IMAP4_SSL(IMAP_HOST, IMAP_PORT)
mail.login(USERNAME, PASSWORD)
mail.select("inbox")
# 搜索未读邮件
status, messages = mail.search(None, 'UNSEEN')
if status == "OK":
mail_ids = messages[0].split()
print(f"发现 {len(mail_ids)} 封新邮件")
if mail_ids:
for mail_id in mail_ids[-5:]: # 显示最后5封
status, msg_data = mail.fetch(mail_id, '(RFC822)')
if status == "OK":
msg = email.message_from_bytes(msg_data[0][1])
# 解码主题
subject = decode_header(msg["Subject"])[0]
if isinstance(subject[0], bytes):
subject = subject[0].decode(subject[1] or 'utf-8')
from_addr = msg["From"]
print(f"发件人: {from_addr}")
print(f"主题: {subject}")
print("-" * 50)
# 可选:标记为已读
# mail.store(mail_id, '+FLAGS', '\\Seen')
mail.logout()
return len(mail_ids)
except Exception as e:
print(f"检查邮件失败: {e}")
return 0
if __name__ == "__main__":
check_email_imap()
Bash 脚本 + curl(简单版)
#!/bin/bash
# 邮箱配置
EMAIL="your_email@gmail.com"
PASSWORD="your_app_password"
IMAP_SERVER="imap.gmail.com"
IMAP_PORT="993"
# 使用curl检查未读邮件(需要curl支持IMAP)
check_email() {
# 方法1:使用curl
curl --url "imaps://$IMAP_SERVER/INBOX" \
--user "$EMAIL:$PASSWORD" \
--request "UNSEEN" 2>/dev/null | head -20
# 方法2:使用openssl(更简单但功能有限)
# echo -e "a1 LOGIN $EMAIL $PASSWORD\na2 SELECT INBOX\na3 SEARCH UNSEEN\n" | \
# openssl s_client -connect $IMAP_SERVER:$IMAP_PORT 2>/dev/null
}
# 主循环,定时检查
while true; do
echo "[$(date)] 检查新邮件..."
check_email
sleep 300 # 每5分钟检查一次
done
Node.js + 第三方库
const Imap = require('imap');
const { simpleParser } = require('mailparser');
const imapConfig = {
user: 'your_email@gmail.com',
password: 'your_app_password',
host: 'imap.gmail.com',
port: 993,
tls: true
};
const imap = new Imap(imapConfig);
function checkNewEmails() {
imap.once('ready', () => {
imap.openBox('INBOX', false, (err, box) => {
if (err) throw err;
// 搜索未读邮件
imap.search(['UNSEEN'], (err, results) => {
if (err) throw err;
console.log(`发现 ${results.length} 封新邮件`);
if (results.length > 0) {
// 获取最新邮件
const latest = results.slice(-5);
const f = imap.fetch(latest, { bodies: '' });
f.on('message', (msg, seqno) => {
msg.on('body', (stream, info) => {
simpleParser(stream, (err, parsed) => {
console.log(`发件人: ${parsed.from.text}`);
console.log(`主题: ${parsed.subject}`);
console.log('---');
});
});
});
}
imap.end();
});
});
});
imap.on('error', (err) => {
console.log('连接错误:', err);
});
imap.connect();
}
checkNewEmails();
定时自动检查脚本
import time
import schedule
from datetime import datetime
def job():
print(f"[{datetime.now()}] 检查新邮件...")
# 调用上面的检查函数
check_email_imap() # 或 check_new_emails()
# 每天特定时间检查
schedule.every().day.at("09:00").do(job)
schedule.every().hour.do(job) # 每小时检查
# 持续运行
while True:
schedule.run_pending()
time.sleep(60)
使用建议:
-
安全性:
- 不要直接在脚本中写密码,使用环境变量
- Gmail等邮箱使用应用专用密码
- 考虑使用OAuth2.0认证
-
部署方式:
- 可以设置cron job或Windows任务计划程序
- 或使用守护进程方式持续运行
-
扩展功能:
- 添加新邮件通知(邮件、短信、钉钉等)
- 自动回复或分类
- 将附件保存到本地
你需要哪种邮件服务,我可以提供更具体的配置说明。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播