Files
dcrouter/ts/mail/delivery/classes.emailsignjob.ts

42 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-05-08 01:13:54 +00:00
import * as plugins from '../../plugins.js';
2025-05-21 00:12:49 +00:00
import type { UnifiedEmailServer } from '../routing/classes.unified.email.server.js';
2024-02-16 13:28:40 +01:00
interface Headers {
[key: string]: string;
}
interface IEmailSignJobOptions {
domain: string;
selector: string;
headers: Headers;
body: string;
}
export class EmailSignJob {
2025-05-21 00:12:49 +00:00
emailServerRef: UnifiedEmailServer;
2024-02-16 13:28:40 +01:00
jobOptions: IEmailSignJobOptions;
2025-05-21 00:12:49 +00:00
constructor(emailServerRef: UnifiedEmailServer, options: IEmailSignJobOptions) {
this.emailServerRef = emailServerRef;
2024-02-16 13:28:40 +01:00
this.jobOptions = options;
}
async loadPrivateKey(): Promise<string> {
2025-05-21 00:12:49 +00:00
const keyInfo = await this.emailServerRef.dkimCreator.readDKIMKeys(this.jobOptions.domain);
return keyInfo.privateKey;
2024-02-16 13:28:40 +01:00
}
public async getSignatureHeader(emailMessage: string): Promise<string> {
const signResult = await plugins.dkimSign(emailMessage, {
signingDomain: this.jobOptions.domain,
selector: this.jobOptions.selector,
privateKey: await this.loadPrivateKey(),
canonicalization: 'relaxed/relaxed',
2024-02-16 13:28:40 +01:00
algorithm: 'rsa-sha256',
signTime: new Date(),
2024-02-16 13:28:40 +01:00
});
const signature = signResult.signatures;
return signature;
}
}