diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-04-30 00:20:23 +0800 | 
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-04-30 13:32:43 +0800 | 
| commit | a58326c5cbe9a73a6b204dac4b9f077d8cf886f4 (patch) | |
| tree | d01c21a1b621cc9fd738a816c4a4c4138eecae07 /services/docker/mail-server/aws-sendmail/delivers | |
| parent | 84148346e29547cfba92dd697be9bbf31a23a926 (diff) | |
| download | crupest-a58326c5cbe9a73a6b204dac4b9f077d8cf886f4.tar.gz crupest-a58326c5cbe9a73a6b204dac4b9f077d8cf886f4.tar.bz2 crupest-a58326c5cbe9a73a6b204dac4b9f077d8cf886f4.zip | |
HALF WORK!: 2025-4-30 2
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); -  } -} | 
