diff options
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/delivers')
3 files changed, 26 insertions, 30 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; } } diff --git a/services/docker/mail-server/aws-sendmail/delivers/dovecot.ts b/services/docker/mail-server/aws-sendmail/delivers/dovecot.ts index 2b35872..1b8c911 100644 --- a/services/docker/mail-server/aws-sendmail/delivers/dovecot.ts +++ b/services/docker/mail-server/aws-sendmail/delivers/dovecot.ts @@ -1,6 +1,5 @@ import { getLogger } from "../logger.ts"; -import { MailDeliverer } from "../deliver.ts"; -import { Mail } from "../mail.ts"; +import { Mail, MailDeliverer } from "../mail.ts"; export class DovecotMailDeliverer extends MailDeliverer { constructor() { @@ -31,11 +30,11 @@ export class DovecotMailDeliverer extends MailDeliverer { status = await ldaProcess.status; } catch (cause) { - this.throwError("external error.", mail, cause); + mail.throwDeliverError(this, "external error.", cause); } if (!status.success) { - this.throwError(`${ldaBin} exited with non-zero.`, mail); + mail.throwDeliverError(this, `${ldaBin} exited with non-zero.`); } } } diff --git a/services/docker/mail-server/aws-sendmail/delivers/traffic.ts b/services/docker/mail-server/aws-sendmail/delivers/traffic.ts deleted file mode 100644 index 3d567f9..0000000 --- a/services/docker/mail-server/aws-sendmail/delivers/traffic.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MailDeliverer } from "../deliver.ts"; -import { DovecotMailDeliverer } from "./dovecot.ts"; -import { AwsContext } from "../aws.ts"; -import { AwsMailDeliverer } from "./aws.ts"; - -export class MailTrafficDeliverer { - receiver: MailDeliverer; - sender: MailDeliverer; - - constructor(aws: AwsContext) { - this.receiver = new DovecotMailDeliverer(); - this.sender = new AwsMailDeliverer(aws); - } -} |