aboutsummaryrefslogtreecommitdiff
path: root/deno/mail-relay/mail.ts
diff options
context:
space:
mode:
Diffstat (limited to 'deno/mail-relay/mail.ts')
-rw-r--r--deno/mail-relay/mail.ts70
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));
}