dcrouter/test/suite/smtpclient_email-composition/test.cep-04.bcc-handling.ts
2025-05-26 04:09:29 +00:00

187 lines
5.1 KiB
TypeScript

import { tap, expect } from '@git.zone/tstest/tapbundle';
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
import { createSmtpClient } from '../../../ts/mail/delivery/smtpclient/index.js';
import { Email } from '../../../ts/mail/core/classes.email.js';
let testServer: ITestServer;
tap.test('setup test SMTP server', async () => {
testServer = await startTestServer({
port: 2577,
tlsEnabled: false,
authRequired: false
});
expect(testServer).toBeTruthy();
expect(testServer.port).toEqual(2577);
});
tap.test('CEP-04: Basic BCC handling', async () => {
console.log('Testing basic BCC handling');
const smtpClient = createSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false,
connectionTimeout: 5000,
debug: true
});
// Create email with BCC recipients
const email = new Email({
from: 'sender@example.com',
to: ['visible@example.com'],
bcc: ['hidden1@example.com', 'hidden2@example.com'],
subject: 'BCC Test Email',
text: 'This email tests BCC functionality'
});
const result = await smtpClient.sendMail(email);
expect(result).toBeDefined();
expect(result.messageId).toBeDefined();
console.log('Successfully sent email with BCC recipients');
await smtpClient.close();
});
tap.test('CEP-04: Multiple BCC recipients', async () => {
console.log('Testing multiple BCC recipients');
const smtpClient = createSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false,
connectionTimeout: 5000,
debug: true
});
// Create email with many BCC recipients
const bccRecipients = Array.from({ length: 10 },
(_, i) => `bcc${i + 1}@example.com`
);
const email = new Email({
from: 'sender@example.com',
to: ['primary@example.com'],
bcc: bccRecipients,
subject: 'Multiple BCC Test',
text: 'Testing with multiple BCC recipients'
});
console.log(`Sending email with ${bccRecipients.length} BCC recipients...`);
const startTime = Date.now();
const result = await smtpClient.sendMail(email);
const elapsed = Date.now() - startTime;
expect(result).toBeDefined();
expect(result.messageId).toBeDefined();
console.log(`Processed ${bccRecipients.length} BCC recipients in ${elapsed}ms`);
await smtpClient.close();
});
tap.test('CEP-04: BCC-only email', async () => {
console.log('Testing BCC-only email');
const smtpClient = createSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false,
connectionTimeout: 5000,
debug: true
});
// Create email with only BCC recipients (no TO or CC)
const email = new Email({
from: 'sender@example.com',
bcc: ['hidden1@example.com', 'hidden2@example.com', 'hidden3@example.com'],
subject: 'BCC-Only Email',
text: 'This email has only BCC recipients'
});
const result = await smtpClient.sendMail(email);
expect(result).toBeDefined();
expect(result.messageId).toBeDefined();
console.log('Successfully sent BCC-only email');
await smtpClient.close();
});
tap.test('CEP-04: Mixed recipient types', async () => {
console.log('Testing mixed recipient types');
const smtpClient = createSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false,
connectionTimeout: 5000,
debug: true
});
// Create email with all recipient types
const email = new Email({
from: 'sender@example.com',
to: ['to1@example.com', 'to2@example.com'],
cc: ['cc1@example.com', 'cc2@example.com'],
bcc: ['bcc1@example.com', 'bcc2@example.com'],
subject: 'Mixed Recipients Test',
text: 'Testing all recipient types together'
});
const result = await smtpClient.sendMail(email);
expect(result).toBeDefined();
expect(result.messageId).toBeDefined();
console.log('Recipient breakdown:');
console.log(` TO: ${email.to?.length || 0} recipients`);
console.log(` CC: ${email.cc?.length || 0} recipients`);
console.log(` BCC: ${email.bcc?.length || 0} recipients`);
await smtpClient.close();
});
tap.test('CEP-04: BCC with special characters in addresses', async () => {
console.log('Testing BCC with special characters');
const smtpClient = createSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false,
connectionTimeout: 5000,
debug: true
});
// BCC addresses with special characters
const specialBccAddresses = [
'user+tag@example.com',
'first.last@example.com',
'user_name@example.com'
];
const email = new Email({
from: 'sender@example.com',
to: ['visible@example.com'],
bcc: specialBccAddresses,
subject: 'BCC Special Characters Test',
text: 'Testing BCC with special character addresses'
});
const result = await smtpClient.sendMail(email);
expect(result).toBeDefined();
expect(result.messageId).toBeDefined();
console.log('Successfully processed BCC addresses with special characters');
await smtpClient.close();
});
tap.test('cleanup test SMTP server', async () => {
if (testServer) {
await stopTestServer(testServer);
}
});
export default tap.start();