diff options
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/delivers/aws.ts')
-rw-r--r-- | services/docker/mail-server/aws-sendmail/delivers/aws.ts | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/services/docker/mail-server/aws-sendmail/delivers/aws.ts b/services/docker/mail-server/aws-sendmail/delivers/aws.ts index 9fe7bec..ecc9956 100644 --- a/services/docker/mail-server/aws-sendmail/delivers/aws.ts +++ b/services/docker/mail-server/aws-sendmail/delivers/aws.ts @@ -1,8 +1,7 @@ import { SendEmailCommand, SESv2Client } from "@aws-sdk/client-sesv2"; import { AwsContext } from "../aws.ts"; -import { Mail } from "../mail.ts"; -import { MailDeliverer } from "../deliver.ts"; +import { Mail, MailDeliverer } from "../mail.ts"; export class AwsMailDeliverer extends MailDeliverer { private _ses; @@ -16,16 +15,28 @@ export class AwsMailDeliverer extends MailDeliverer { } protected override async doDeliver(mail: Mail): Promise<void> { - const sendCommand = new SendEmailCommand({ - Content: { - Raw: { Data: mail.encodeUtf8() }, - }, - }); - - const res = await this._ses.send(sendCommand); - if (res.MessageId == null) { - throw Error("No message id is returned from aws."); + let awsMessageId: string | undefined; + + try { + const sendCommand = new SendEmailCommand({ + Content: { + Raw: { Data: mail.encodeUtf8() }, + }, + }); + + const res = await this._ses.send(sendCommand); + 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.")); } - mail.aws_message_id = res.MessageId; + mail.awsMessageId = awsMessageId ?? null; } } |