自建邮箱版本
This commit is contained in:
116
main.py
116
main.py
@@ -11,10 +11,12 @@ from core.config import Config
|
||||
from core.database import DatabaseManager
|
||||
from core.logger import setup_logger
|
||||
from register.register_worker import RegisterWorker
|
||||
from register.host_register_worker import HostRegisterWorker
|
||||
from services.email_manager import EmailManager
|
||||
from services.fetch_manager import FetchManager
|
||||
from services.proxy_pool import ProxyPool
|
||||
from services.token_pool import TokenPool
|
||||
from services.self_hosted_email import SelfHostedEmail
|
||||
|
||||
|
||||
class CursorRegister:
|
||||
@@ -25,6 +27,8 @@ class CursorRegister:
|
||||
self.fetch_manager = FetchManager(self.config)
|
||||
self.proxy_pool = ProxyPool(self.config, self.fetch_manager)
|
||||
self.token_pool = TokenPool(self.config)
|
||||
|
||||
# 初始化常规邮箱服务
|
||||
self.email_manager = EmailManager(self.config, self.db_manager)
|
||||
self.register_worker = RegisterWorker(
|
||||
self.config,
|
||||
@@ -32,6 +36,25 @@ class CursorRegister:
|
||||
self.email_manager
|
||||
)
|
||||
|
||||
# 初始化自建邮箱服务(如果配置了)
|
||||
self.self_hosted_email = None
|
||||
self.host_register_worker = None
|
||||
if hasattr(self.config, 'self_hosted_email_config') and self.config.self_hosted_email_config:
|
||||
self.self_hosted_email = SelfHostedEmail(
|
||||
self.fetch_manager,
|
||||
self.config.self_hosted_email_config.api_base_url,
|
||||
self.config.self_hosted_email_config.api_key
|
||||
)
|
||||
self.logger.info("自建邮箱服务已初始化")
|
||||
|
||||
# 初始化自建邮箱注册工作器
|
||||
self.host_register_worker = HostRegisterWorker(
|
||||
self.config,
|
||||
self.fetch_manager,
|
||||
self.self_hosted_email
|
||||
)
|
||||
self.logger.info("自建邮箱注册工作器已初始化")
|
||||
|
||||
async def initialize(self):
|
||||
"""初始化数据库"""
|
||||
await self.db_manager.initialize()
|
||||
@@ -136,6 +159,61 @@ class CursorRegister:
|
||||
|
||||
return successful
|
||||
|
||||
async def batch_register_with_host(self, num: int):
|
||||
"""使用自建邮箱批量注册"""
|
||||
if not self.host_register_worker:
|
||||
self.logger.error("未配置自建邮箱注册工作器,无法继续")
|
||||
return []
|
||||
|
||||
try:
|
||||
self.logger.info(f"开始使用自建邮箱批量注册 {num} 个账号")
|
||||
|
||||
# 1. 获取token对
|
||||
token_pairs = await self.token_pool.batch_generate(num)
|
||||
if not token_pairs:
|
||||
self.logger.error("获取token失败,终止注册")
|
||||
return []
|
||||
|
||||
actual_num = len(token_pairs) # 根据实际获取到的token对数量调整注册数量
|
||||
if actual_num < num:
|
||||
self.logger.warning(f"只获取到 {actual_num} 对token,将减少注册数量")
|
||||
num = actual_num
|
||||
|
||||
# 2. 获取代理
|
||||
proxies = await self.proxy_pool.batch_get(num)
|
||||
|
||||
# 在关键位置添加详细日志
|
||||
self.logger.debug(f"代理列表: {proxies}")
|
||||
self.logger.debug(f"尝试使用的token对数量: {len(token_pairs)}")
|
||||
|
||||
# 3. 创建注册任务
|
||||
tasks = []
|
||||
for proxy, token_pair in zip(proxies, token_pairs):
|
||||
task = self.host_register_worker.register(proxy, token_pair)
|
||||
tasks.append(task)
|
||||
|
||||
# 4. 并发执行
|
||||
results = await asyncio.gather(*tasks, return_exceptions=True)
|
||||
|
||||
# 5. 处理结果
|
||||
successful = []
|
||||
failed = []
|
||||
|
||||
for i, result in enumerate(results):
|
||||
if isinstance(result, Exception):
|
||||
self.logger.error(f"自建邮箱注册任务 {i+1} 失败: {str(result)}")
|
||||
failed.append(str(result))
|
||||
else:
|
||||
self.logger.info(f"自建邮箱注册任务 {i+1} 成功: {result.get('email')}")
|
||||
successful.append(result)
|
||||
|
||||
self.logger.info(f"自建邮箱注册完成: 成功 {len(successful)}, 失败 {len(failed)}")
|
||||
return successful
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"自建邮箱批量注册失败: {str(e)}")
|
||||
return []
|
||||
|
||||
|
||||
async def main():
|
||||
register = CursorRegister()
|
||||
@@ -145,16 +223,18 @@ async def main():
|
||||
batch_size = register.config.register_config.batch_size
|
||||
total_registered = 0
|
||||
|
||||
while True:
|
||||
# 直接检查数据库中是否有可用的邮箱账号
|
||||
pending_count = await register.email_manager.count_pending_accounts()
|
||||
if pending_count <= 0:
|
||||
register.logger.info("没有可用的邮箱账号,注册完成")
|
||||
break
|
||||
# 直接使用自建邮箱模式,不再检查配置
|
||||
register.logger.info("使用自建邮箱模式")
|
||||
|
||||
# 确保已初始化自建邮箱服务
|
||||
if not register.host_register_worker:
|
||||
register.logger.error("自建邮箱注册工作器未初始化,请检查配置")
|
||||
return
|
||||
|
||||
# 执行批量注册
|
||||
register.logger.info(f"发现 {pending_count} 个可用邮箱,开始新一轮批量注册,批次大小: {batch_size}")
|
||||
results = await register.batch_register(batch_size)
|
||||
# 自建邮箱模式,直接执行自建邮箱批量注册
|
||||
while True:
|
||||
register.logger.info(f"开始新一轮自建邮箱批量注册,批次大小: {batch_size}")
|
||||
results = await register.batch_register_with_host(batch_size)
|
||||
|
||||
# 统计结果
|
||||
successful = len(results)
|
||||
@@ -162,9 +242,8 @@ async def main():
|
||||
|
||||
register.logger.info(f"当前总进度: 已注册 {total_registered} 个账号")
|
||||
|
||||
# 批次结束后等待3秒,确保所有数据库更新都已完成
|
||||
register.logger.info("本批次注册完成,等待数据库状态完全更新...")
|
||||
await asyncio.sleep(3)
|
||||
# 批次之间的间隔
|
||||
await asyncio.sleep(5)
|
||||
|
||||
# 如果本批次注册失败率过高,暂停一段时间
|
||||
if successful < batch_size * 0.5 and successful > 0: # 成功率低于50%但不为零
|
||||
@@ -173,9 +252,16 @@ async def main():
|
||||
elif successful == 0 and batch_size > 0: # 完全失败
|
||||
register.logger.error("本批次完全失败,可能存在系统问题,暂停120秒后继续")
|
||||
await asyncio.sleep(120)
|
||||
else:
|
||||
# 正常等待一个较短的时间再继续下一批
|
||||
await asyncio.sleep(5)
|
||||
|
||||
# 让用户决定是否继续
|
||||
try:
|
||||
answer = input("是否继续下一批注册? (y/n): ").strip().lower()
|
||||
if answer != 'y':
|
||||
register.logger.info("用户选择停止注册")
|
||||
break
|
||||
except Exception:
|
||||
# 如果在非交互环境中运行,默认继续
|
||||
pass
|
||||
|
||||
except Exception as e:
|
||||
register.logger.error(f"程序执行出错: {str(e)}")
|
||||
|
||||
Reference in New Issue
Block a user