From f4d60fb87f9c6d86a584eba11e6a3d17479af201 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 1 Jul 2025 17:29:07 +0800 Subject: mail: remove 'aws' of aws message id map. --- deno/mail/aws/app.ts | 17 ++++++-------- deno/mail/aws/deliver.ts | 12 +++------- deno/mail/aws/mail.ts | 59 ------------------------------------------------ 3 files changed, 10 insertions(+), 78 deletions(-) delete mode 100644 deno/mail/aws/mail.ts (limited to 'deno/mail/aws') diff --git a/deno/mail/aws/app.ts b/deno/mail/aws/app.ts index 6c7ede7..7e16488 100644 --- a/deno/mail/aws/app.ts +++ b/deno/mail/aws/app.ts @@ -13,14 +13,10 @@ import { DbService } from "../db.ts"; import { createHono, createInbound, createSmtp, sendMail } from "../app.ts"; import { DovecotMailDeliverer } from "../dovecot.ts"; import { MailDeliverer } from "../mail.ts"; -import { - AwsMailMessageIdRewriteHook, - AwsMailMessageIdSaveHook, -} from "./mail.ts"; +import { MessageIdRewriteHook, MessageIdSaveHook } from "../mail.ts"; import { AwsMailDeliverer } from "./deliver.ts"; import { AwsMailFetcher, LiveMailNotFoundError } from "./fetch.ts"; - const PREFIX = "crupest-mail-server"; const CONFIG_DEFINITIONS = { dataPath: { @@ -105,12 +101,12 @@ function createOutbound( ) { const deliverer = new AwsMailDeliverer(awsOptions); deliverer.preHooks.push( - new AwsMailMessageIdRewriteHook(db.messageIdToAws.bind(db)), + new MessageIdRewriteHook(db.messageIdToNew.bind(db)), ); deliverer.postHooks.push( - new AwsMailMessageIdSaveHook( - async (original, aws, context) => { - await db.addMessageIdMap({ message_id: original, aws_message_id: aws }); + new MessageIdSaveHook( + async (original, new_message_id, context) => { + await db.addMessageIdMap({ message_id: original, new_message_id }); void local?.saveNewSent(context.logTag, context.mail, original); }, ), @@ -240,7 +236,8 @@ function createServerServices() { } async function serve(cron: boolean = false) { - const { config, fetcher, inbound, smtp, dbService, hono } = createServerServices(); + const { config, fetcher, inbound, smtp, dbService, hono } = + createServerServices(); await dbService.migrate(); diff --git a/deno/mail/aws/deliver.ts b/deno/mail/aws/deliver.ts index 0195369..37a871d 100644 --- a/deno/mail/aws/deliver.ts +++ b/deno/mail/aws/deliver.ts @@ -6,12 +6,6 @@ import { import { Mail, MailDeliverContext, MailDeliverer } from "../mail.ts"; -declare module "../mail.ts" { - interface MailDeliverResult { - awsMessageId?: string; - } -} - export class AwsMailDeliverer extends MailDeliverer { readonly name = "aws"; readonly #aws; @@ -42,12 +36,12 @@ export class AwsMailDeliverer extends MailDeliverer { "AWS send-email returned null message id.", ); } else { - context.result.awsMessageId = + context.result.newMessageId = `${res.MessageId}@${this.#aws.region}.amazonses.com`; } - context.result.smtpMessage = - `AWS Message ID: ${context.result.awsMessageId}`; + context.result.messageForSmtp = + `AWS Message ID: ${context.result.newMessageId}`; context.result.recipients.set("*", { kind: "success", message: `Succeeded to call aws send-email api.`, diff --git a/deno/mail/aws/mail.ts b/deno/mail/aws/mail.ts deleted file mode 100644 index 26f3ea0..0000000 --- a/deno/mail/aws/mail.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { MailDeliverContext, MailDeliverHook } from "../mail.ts"; - -export class AwsMailMessageIdRewriteHook implements MailDeliverHook { - readonly #lookup; - - constructor(lookup: (origin: string) => Promise) { - this.#lookup = lookup; - } - - async callback(context: MailDeliverContext): Promise { - const addresses = context.mail.simpleFindAllAddresses(); - for (const address of addresses) { - const awsMessageId = await this.#lookup(address); - if (awsMessageId != null && awsMessageId.length !== 0) { - console.info( - context.logTag, - `Rewrite address-line string in mail: ${address} => ${awsMessageId}.`, - ); - context.mail.raw = context.mail.raw.replaceAll(address, awsMessageId); - } - } - } -} - -export class AwsMailMessageIdSaveHook implements MailDeliverHook { - readonly #record; - - constructor( - record: ( - original: string, - aws: string, - context: MailDeliverContext, - ) => Promise, - ) { - this.#record = record; - } - - async callback(context: MailDeliverContext): Promise { - const { messageId } = context.mail.parsed; - if (messageId == null) { - console.warn( - context.logTag, - "Original mail doesn't have message id, skip saving message id map.", - ); - return; - } - if (context.result.awsMessageId != null) { - console.info( - context.logTag, - `Save message id map: ${messageId} => ${context.result.awsMessageId}.`, - ); - context.mail.raw = context.mail.raw.replaceAll( - messageId, - context.result.awsMessageId, - ); - await this.#record(messageId, context.result.awsMessageId, context); - } - } -} -- cgit v1.2.3