From 84148346e29547cfba92dd697be9bbf31a23a926 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Wed, 30 Apr 2025 00:20:23 +0800 Subject: HALF WORK!: 2025-4-30 --- .../docker/mail-server/aws-sendmail/deliver.ts | 46 +++++++++++++--------- 1 file changed, 28 insertions(+), 18 deletions(-) (limited to 'services/docker/mail-server/aws-sendmail/deliver.ts') diff --git a/services/docker/mail-server/aws-sendmail/deliver.ts b/services/docker/mail-server/aws-sendmail/deliver.ts index 7035d8c..e0c6e1c 100644 --- a/services/docker/mail-server/aws-sendmail/deliver.ts +++ b/services/docker/mail-server/aws-sendmail/deliver.ts @@ -1,51 +1,61 @@ +import { Mail } from "./mail.ts"; + class MailDeliverError extends Error { constructor( message: string, options: ErrorOptions, - public readonly rawMail: string, + public readonly mail: Mail, ) { super(message, options); } } -export class MailDeliverContext { - constructor(public rawMail: string) {} -} - -type MailDeliverHook = (context: Context) => Promise; +type MailDeliverHook = (mail: Mail) => Promise; -export abstract class MailDeliverer { - preHooks: MailDeliverHook[] = []; - postHooks: MailDeliverHook[] = []; +export abstract class MailDeliverer { + preHooks: MailDeliverHook[] = []; + postHooks: MailDeliverHook[] = []; constructor(public readonly destination: string) {} - protected abstract doPrepare(rawMail: string): Promise; - protected abstract doDeliver(context: TContext): Promise; + protected doPrepare(_mail: Mail): Promise { + return Promise.resolve(); + } + protected abstract doDeliver(mail: Mail): Promise; + protected doFinalize(_mail: Mail): Promise { + return Promise.resolve(); + } + + async deliverRaw(raw: string): Promise { + const mail = new Mail(raw); + await this.deliver(mail); + } - async deliver(rawMail: string): Promise { - const context = await this.doPrepare(rawMail); + async deliver(mail: Mail): Promise { + this.doPrepare(mail); for (const hook of this.preHooks) { - await hook(context); + await hook(mail); } - await this.doDeliver(context); + await this.doDeliver(mail); for (const hook of this.postHooks) { - await hook(context); + await hook(mail); } + + await this.doFinalize(mail); } protected throwError( reason: string, - rawMail: string, + mail: Mail, cause?: unknown, ): never { throw new MailDeliverError( `Failed to deliver mail to ${this.destination}: ${reason}`, { cause }, - rawMail, + mail, ); } } -- cgit v1.2.3