aboutsummaryrefslogtreecommitdiff
path: root/deno/mail/aws
diff options
context:
space:
mode:
Diffstat (limited to 'deno/mail/aws')
-rw-r--r--deno/mail/aws/app.ts17
-rw-r--r--deno/mail/aws/deliver.ts12
-rw-r--r--deno/mail/aws/mail.ts59
3 files changed, 10 insertions, 78 deletions
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<string | null>) {
- this.#lookup = lookup;
- }
-
- async callback(context: MailDeliverContext): Promise<void> {
- 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<void>,
- ) {
- this.#record = record;
- }
-
- async callback(context: MailDeliverContext): Promise<void> {
- 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);
- }
- }
-}