diff options
Diffstat (limited to 'deno/mail-relay/mail.ts')
-rw-r--r-- | deno/mail-relay/mail.ts | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/deno/mail-relay/mail.ts b/deno/mail-relay/mail.ts index 8c2e067..12d5972 100644 --- a/deno/mail-relay/mail.ts +++ b/deno/mail-relay/mail.ts @@ -4,12 +4,15 @@ import emailAddresses from "email-addresses"; import { Logger } from "@crupest/base/log"; -class MailSimpleParseError extends Error { } +class MailSimpleParseError extends Error {} class MailSimpleParsedHeaders { - #logger + #logger; - constructor(logger: Logger | undefined, public fields: [key:string, value: string][]) { + constructor( + logger: Logger | undefined, + public fields: [key: string, value: string][], + ) { this.#logger = logger; } @@ -28,7 +31,9 @@ class MailSimpleParsedHeaders { if (match != null) { return match[1]; } else { - this.#logger?.warn("Invalid message-id header of mail: ", messageIdField); + this.#logger?.warn( + "Invalid message-id header of mail: " + messageIdField, + ); return undefined; } } @@ -71,10 +76,10 @@ class MailSimpleParsedSections { eol: string; sep: string; - #logger + #logger; constructor(logger: Logger | undefined, raw: string) { - this.#logger = logger + this.#logger = logger; const twoEolMatch = raw.match(/(\r?\n)(\r?\n)/); if (twoEolMatch == null) { @@ -96,7 +101,7 @@ class MailSimpleParsedSections { } headers(): MailSimpleParsedHeaders { - const headers = [] as [key:string, value: string][]; + const headers = [] as [key: string, value: string][]; let field: string | null = null; let lineNumber = 1; @@ -105,9 +110,7 @@ class MailSimpleParsedSections { if (field == null) return; const sepPos = field.indexOf(":"); if (sepPos === -1) { - throw new MailSimpleParseError( - `No ':' in the header line: ${field}`, - ); + throw new MailSimpleParseError(`No ':' in the header line: ${field}`); } headers.push([field.slice(0, sepPos).trim(), field.slice(sepPos + 1)]); field = null; @@ -149,8 +152,8 @@ export class Mail { } simpleFindAllAddresses(): string[] { - const re = /,?\<?([a-z0-9_'+\-\.]+\@[a-z0-9_'+\-\.]+)\>?,?/ig - return [...this.raw.matchAll(re)].map(m => m[1]) + const re = /,?\<?([a-z0-9_'+\-\.]+\@[a-z0-9_'+\-\.]+)\>?,?/gi; + return [...this.raw.matchAll(re)].map((m) => m[1]); } } @@ -169,16 +172,21 @@ export class MailDeliverResult { constructor(public mail: Mail) {} hasError(): boolean { - return this.recipients.size === 0 || - this.recipients.values().some((r) => r.kind !== "done"); + return ( + this.recipients.size === 0 || + this.recipients.values().some((r) => r.kind !== "done") + ); } [Symbol.for("Deno.customInspect")]() { return [ `message: ${this.message}`, - ...this.recipients.entries().map(([recipient, result]) => - `${recipient} [${result.kind}]: ${result.message}` - ), + ...this.recipients + .entries() + .map( + ([recipient, result]) => + `${recipient} [${result.kind}]: ${result.message}`, + ), ].join("\n"); } } @@ -204,7 +212,7 @@ export abstract class MailDeliverer { preHooks: MailDeliverHook[] = []; postHooks: MailDeliverHook[] = []; - constructor(protected readonly logger: Logger) { } + constructor(protected readonly logger: Logger) {} protected abstract doDeliver( mail: Mail, @@ -234,8 +242,7 @@ export abstract class MailDeliverer { await hook.callback(context); } - context.logger.info("Deliver result:"); - context.logger.info(context.result); + context.logger.info("Deliver result:\n" + Deno.inspect(context.result)); if (context.result.hasError()) { throw new Error("Mail failed to deliver."); @@ -248,13 +255,19 @@ export abstract class MailDeliverer { export abstract class SyncMailDeliverer extends MailDeliverer { #last: Promise<void> = Promise.resolve(); - override async deliver( - options: { mail: Mail; recipients?: string[] }, - ): Promise<MailDeliverResult> { - this.logger.info("The mail deliverer is sync. Wait for last delivering done..."); + override async deliver(options: { + mail: Mail; + recipients?: string[]; + }): Promise<MailDeliverResult> { + this.logger.info( + "The mail deliverer is sync. Wait for last delivering done...", + ); await this.#last; const result = super.deliver(options); - this.#last = result.then(() => {}, () => {}); + this.#last = result.then( + () => {}, + () => {}, + ); return result; } } @@ -278,8 +291,8 @@ export class RecipientFromHeadersHook implements MailDeliverHook { .forEach((r) => context.recipients.add(r)); context.logger.info( - "Recipients found from mail headers: ", - [...context.recipients].join(" "), + "Recipients found from mail headers: " + + [...context.recipients].join(", "), ); } return Promise.resolve(); @@ -292,8 +305,7 @@ export class FallbackRecipientHook implements MailDeliverHook { callback(context: MailDeliverContext) { if (context.recipients.size === 0) { context.logger.info( - "No recipients, fill with fallback: ", - [...this.fallback].join(" "), + "No recipients, fill with fallback: " + [...this.fallback].join(", "), ); this.fallback.forEach((a) => context.recipients.add(a)); } |