aboutsummaryrefslogtreecommitdiff
path: root/services/docker/mail-server/relay/aws/deliver.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/mail-server/relay/aws/deliver.ts')
-rw-r--r--services/docker/mail-server/relay/aws/deliver.ts44
1 files changed, 28 insertions, 16 deletions
diff --git a/services/docker/mail-server/relay/aws/deliver.ts b/services/docker/mail-server/relay/aws/deliver.ts
index 93e4954..793c85a 100644
--- a/services/docker/mail-server/relay/aws/deliver.ts
+++ b/services/docker/mail-server/relay/aws/deliver.ts
@@ -1,7 +1,14 @@
import { SendEmailCommand, SESv2Client } from "@aws-sdk/client-sesv2";
import { AwsContext } from "./context.ts";
-import { Mail, MailDeliverer } from "../mail.ts";
+import {
+ Mail,
+ MailDeliverContext,
+ MailDeliverer,
+ MailDeliverReceiptResult,
+} from "./mail.ts";
+import { warn } from "../logger.ts";
+import { log } from "node:console";
export class AwsMailDeliverer extends MailDeliverer {
readonly name = "aws";
@@ -9,12 +16,19 @@ export class AwsMailDeliverer extends MailDeliverer {
constructor(aws: AwsContext) {
super();
- const { region, credentials } = aws;
- this.#ses = new SESv2Client({ region, credentials });
+ this.#ses = new SESv2Client(aws);
}
- protected override async doDeliver(mail: Mail): Promise<void> {
- let awsMessageId: string | undefined;
+ protected override async doDeliver(
+ mail: Mail,
+ context: MailDeliverContext,
+ ): Promise<void> {
+ log("Begin to call aws send-email api...");
+
+ const result: MailDeliverReceiptResult = {
+ kind: "done",
+ message: "Success to call send-email api of aws.",
+ };
try {
const sendCommand = new SendEmailCommand({
@@ -24,18 +38,16 @@ export class AwsMailDeliverer extends MailDeliverer {
});
const res = await this.#ses.send(sendCommand);
- awsMessageId = res.MessageId;
+ if (res.MessageId == null) {
+ warn("Aws send-email returns no message id.");
+ }
+ mail.awsMessageId = res.MessageId;
} catch (cause) {
- mail.throwDeliverError(
- this,
- "failed to call send-email api of aws.",
- cause,
- );
- }
-
- if (awsMessageId == null) {
- mail.setDelivered(this, new Error("No message id is returned from aws."));
+ result.kind = "fail";
+ result.message = "An error was thrown when calling aws send-email." +
+ cause;
+ result.cause = cause;
}
- mail.awsMessageId = awsMessageId;
+ context.result.set("*", result);
}
}