187 lines
5.1 KiB
TypeScript
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(); |