taolib.testing.email_service.services#
业务逻辑层。
Submodules#
- taolib.testing.email_service.services.bounce_handler
- taolib.testing.email_service.services.email_service
- taolib.testing.email_service.services.queue_processor
- taolib.testing.email_service.services.subscription_service
- taolib.testing.email_service.services.template_service
- taolib.testing.email_service.services.tracking_service
Classes#
退信处理器。 |
|
核心邮件发送服务。 |
|
邮件队列处理器。 |
|
订阅管理服务。 |
|
模板管理服务。 |
|
邮件分析数据。 |
|
追踪和分析服务。 |
Package Contents#
- class taolib.testing.email_service.services.BounceHandler(tracking_service: taolib.testing.email_service.services.tracking_service.TrackingService, subscription_service: taolib.testing.email_service.services.subscription_service.SubscriptionService, email_repo: taolib.testing.email_service.repository.email_repo.EmailRepository, hard_bounce_threshold: int = 1)#
退信处理器。
- _tracking#
- _subscription#
- _email_repo#
- _hard_bounce_threshold = 1#
- async handle_bounce(email_id: str, bounce_type: taolib.testing.email_service.models.enums.BounceType, reason: str, recipient: str, provider: str | None = None, raw_payload: dict | None = None) None#
处理退信事件。
- 参数:
email_id -- 邮件 ID
bounce_type -- 退信类型
reason -- 退信原因
recipient -- 收件人
provider -- 提供商名称
raw_payload -- 原始 Webhook 数据
- class taolib.testing.email_service.services.EmailService(email_repo: taolib.testing.email_service.repository.email_repo.EmailRepository, template_service: taolib.testing.email_service.services.template_service.TemplateService, subscription_service: taolib.testing.email_service.services.subscription_service.SubscriptionService, provider_manager: taolib.testing.email_service.providers.failover.ProviderFailoverManager, queue: taolib.testing.email_service.queue.protocol.EmailQueueProtocol, tracking_service: taolib.testing.email_service.services.tracking_service.TrackingService)#
核心邮件发送服务。
编排完整的邮件发送流程: 1. 模板渲染(如有模板) 2. 订阅状态检查(营销邮件) 3. 创建邮件文档 4. 入队或直接发送
- _email_repo#
- _template_service#
- _subscription_service#
- _provider_manager#
- _queue#
- _tracking_service#
- async send_email(data: taolib.testing.email_service.models.email.EmailCreate, enqueue: bool = True) taolib.testing.email_service.models.email.EmailResponse#
发送单封邮件。
- 参数:
data -- 邮件创建数据
enqueue -- 是否入队异步发送,False 则直接发送
- 返回:
邮件响应
- async send_bulk(emails: list[taolib.testing.email_service.models.email.EmailCreate]) list[taolib.testing.email_service.models.email.EmailResponse]#
批量发送邮件。
- async _send_now(email_doc: taolib.testing.email_service.models.email.EmailDocument) taolib.testing.email_service.models.email.EmailDocument#
立即发送邮件。
- 参数:
email_doc -- 邮件文档
- 返回:
更新后的邮件文档
- async get_email(email_id: str) taolib.testing.email_service.models.email.EmailResponse#
获取邮件详情。
- async list_emails(status: taolib.testing.email_service.models.enums.EmailStatus | None = None, email_type: taolib.testing.email_service.models.enums.EmailType | None = None, skip: int = 0, limit: int = 100) list[taolib.testing.email_service.models.email.EmailResponse]#
查询邮件列表。
- class taolib.testing.email_service.services.QueueProcessor(queue: taolib.testing.email_service.queue.protocol.EmailQueueProtocol, email_repo: taolib.testing.email_service.repository.email_repo.EmailRepository, send_callback, poll_interval: float = 1.0, batch_size: int = 10)#
邮件队列处理器。
作为后台 asyncio.Task 运行,持续从队列取出邮件并发送。 参考 data_sync.services.scheduler.AsyncScheduler 模式。
- _queue#
- _email_repo#
- _send_callback#
- _poll_interval = 1.0#
- _batch_size = 10#
- _running = False#
- _task: asyncio.Task[None] | None = None#
- class taolib.testing.email_service.services.SubscriptionService(subscription_repo: taolib.testing.email_service.repository.subscription_repo.SubscriptionRepository)#
订阅管理服务。
- _repo#
- async get_or_create_subscription(email: str) taolib.testing.email_service.models.subscription.SubscriptionDocument#
获取或创建订阅记录。
如果邮箱没有订阅记录,则创建一个新的激活状态记录。
- 参数:
email -- 邮箱地址
- 返回:
订阅文档
- async unsubscribe(token: str, reason: str | None = None) taolib.testing.email_service.models.subscription.SubscriptionResponse#
处理退订请求。
- 参数:
token -- 退订令牌
reason -- 退订原因
- 返回:
更新后的订阅响应
- 抛出:
SubscriptionError -- 令牌无效或已退订
- async unsubscribe_by_email(email: str, reason: str | None = None) taolib.testing.email_service.models.subscription.SubscriptionResponse | None#
按邮箱退订(用于硬退信自动退订)。
- async resubscribe(email: str) taolib.testing.email_service.models.subscription.SubscriptionResponse#
重新订阅。
- 参数:
email -- 邮箱地址
- 返回:
更新后的订阅响应
- 抛出:
SubscriptionError -- 订阅记录不存在
- class taolib.testing.email_service.services.TemplateService(template_repo: taolib.testing.email_service.repository.template_repo.TemplateRepository, engine: taolib.testing.email_service.template.engine.TemplateEngine)#
模板管理服务。
- _repo#
- _engine#
- async create_template(data: taolib.testing.email_service.models.template.TemplateCreate) taolib.testing.email_service.models.template.TemplateResponse#
创建模板。
- async update_template(template_id: str, data: taolib.testing.email_service.models.template.TemplateUpdate) taolib.testing.email_service.models.template.TemplateResponse | None#
更新模板。
- async get_template(template_id: str) taolib.testing.email_service.models.template.TemplateResponse | None#
获取模板。
- async get_template_by_name(name: str) taolib.testing.email_service.models.template.TemplateResponse | None#
按名称获取模板。
- async list_templates(email_type: taolib.testing.email_service.models.enums.EmailType | None = None, is_active: bool | None = None, skip: int = 0, limit: int = 100) list[taolib.testing.email_service.models.template.TemplateResponse]#
查询模板列表。
- async render_template(template_id: str, variables: dict, email_type: taolib.testing.email_service.models.enums.EmailType = EmailType.TRANSACTIONAL, recipient_email: str | None = None, unsubscribe_token: str | None = None) taolib.testing.email_service.template.engine.RenderedEmail#
渲染模板。
- 参数:
template_id -- 模板 ID
variables -- 模板变量
email_type -- 邮件类型
recipient_email -- 收件人邮箱
unsubscribe_token -- 退订令牌
- 返回:
渲染后的邮件内容
- 抛出:
TemplateNotFoundError -- 模板不存在
- class taolib.testing.email_service.services.EmailAnalytics#
Bases:
pydantic.BaseModel邮件分析数据。
- class taolib.testing.email_service.services.TrackingService(tracking_repo: taolib.testing.email_service.repository.tracking_repo.TrackingRepository, email_repo: taolib.testing.email_service.repository.email_repo.EmailRepository)#
追踪和分析服务。
- _tracking_repo#
- _email_repo#
- async record_event(email_id: str, event_type: taolib.testing.email_service.models.enums.TrackingEventType, recipient: str, provider: str | None = None, ip_address: str | None = None, user_agent: str | None = None, click_url: str | None = None, bounce_type: str | None = None, bounce_reason: str | None = None, raw_payload: dict | None = None) taolib.testing.email_service.models.tracking.TrackingEventResponse#
记录追踪事件。
同时更新关联的 EmailDocument 状态。
- async get_events_for_email(email_id: str) list[taolib.testing.email_service.models.tracking.TrackingEventResponse]#
获取邮件的所有追踪事件。
- async get_analytics(start: datetime.datetime, end: datetime.datetime) EmailAnalytics#
获取时间范围内的分析数据。
- async get_daily_stats(start: datetime.datetime, end: datetime.datetime) list[dict]#
获取按日统计数据。
- async _update_email_status(email_id: str, event_type: taolib.testing.email_service.models.enums.TrackingEventType, timestamp: datetime.datetime) None#
根据追踪事件更新邮件状态。