2026-02-10 15:31:31 +00:00
|
|
|
import * as plugins from '../../plugins.js';
|
|
|
|
|
import type { UnifiedEmailServer } from '../routing/classes.unified.email.server.js';
|
2025-10-24 08:09:29 +00:00
|
|
|
|
|
|
|
|
interface Headers {
|
|
|
|
|
[key: string]: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface IEmailSignJobOptions {
|
|
|
|
|
domain: string;
|
|
|
|
|
selector: string;
|
|
|
|
|
headers: Headers;
|
|
|
|
|
body: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class EmailSignJob {
|
|
|
|
|
emailServerRef: UnifiedEmailServer;
|
|
|
|
|
jobOptions: IEmailSignJobOptions;
|
|
|
|
|
|
|
|
|
|
constructor(emailServerRef: UnifiedEmailServer, options: IEmailSignJobOptions) {
|
|
|
|
|
this.emailServerRef = emailServerRef;
|
|
|
|
|
this.jobOptions = options;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async loadPrivateKey(): Promise<string> {
|
|
|
|
|
const keyInfo = await this.emailServerRef.dkimCreator.readDKIMKeys(this.jobOptions.domain);
|
|
|
|
|
return keyInfo.privateKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async getSignatureHeader(emailMessage: string): Promise<string> {
|
2026-02-10 15:31:31 +00:00
|
|
|
const privateKey = await this.loadPrivateKey();
|
2025-10-24 08:09:29 +00:00
|
|
|
const signResult = await plugins.dkimSign(emailMessage, {
|
2026-02-10 15:31:31 +00:00
|
|
|
signingDomain: this.jobOptions.domain,
|
|
|
|
|
selector: this.jobOptions.selector,
|
|
|
|
|
privateKey,
|
|
|
|
|
canonicalization: 'relaxed/relaxed',
|
2025-10-24 08:09:29 +00:00
|
|
|
algorithm: 'rsa-sha256',
|
2026-02-10 15:31:31 +00:00
|
|
|
signTime: new Date(),
|
2025-10-24 08:09:29 +00:00
|
|
|
signatureData: [
|
|
|
|
|
{
|
2026-02-10 15:31:31 +00:00
|
|
|
signingDomain: this.jobOptions.domain,
|
|
|
|
|
selector: this.jobOptions.selector,
|
|
|
|
|
privateKey,
|
2025-10-24 08:09:29 +00:00
|
|
|
algorithm: 'rsa-sha256',
|
2026-02-10 15:31:31 +00:00
|
|
|
canonicalization: 'relaxed/relaxed',
|
2025-10-24 08:09:29 +00:00
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
});
|
|
|
|
|
const signature = signResult.signatures;
|
|
|
|
|
return signature;
|
|
|
|
|
}
|
|
|
|
|
}
|