Files
mailer/test/suite/smtpclient_security/test.csec-10.anti-spam-measures.ts
Juergen Kunz 17f5661636
Some checks failed
CI / Type Check & Lint (push) Failing after 3s
CI / Build Test (Current Platform) (push) Failing after 3s
CI / Build All Platforms (push) Failing after 3s
feat(storage): add comprehensive tests for StorageManager with memory, filesystem, and custom function backends
feat(email): implement EmailSendJob class for robust email delivery with retry logic and MX record resolution

feat(mail): restructure mail module exports for simplified access to core and delivery functionalities
2025-10-28 19:46:17 +00:00

196 lines
5.5 KiB
TypeScript

import { tap, expect } from '@git.zone/tstest/tapbundle';
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.ts';
import { createTestSmtpClient } from '../../helpers/smtp.client.ts';
import { Email } from '../../../ts/mail/core/classes.email.ts';
let testServer: ITestServer;
tap.test('setup test SMTP server', async () => {
testServer = await startTestServer({
port: 2570,
tlsEnabled: false,
authRequired: false
});
expect(testServer).toBeTruthy();
expect(testServer.port).toBeGreaterThan(0);
});
tap.test('CSEC-10: Reputation-based filtering', async () => {
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
const email = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Reputation test',
text: 'Testing reputation-based filtering'
});
const result = await smtpClient.sendMail(email);
console.log('Good reputation: Message accepted');
expect(result.success).toBeTruthy();
await smtpClient.close();
});
tap.test('CSEC-10: Content filtering and spam scoring', async () => {
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
// Test 1: Clean email
const cleanEmail = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Business proposal',
text: 'I would like to discuss our upcoming project. Please let me know your availability.'
});
const cleanResult = await smtpClient.sendMail(cleanEmail);
console.log('Clean email: Accepted');
expect(cleanResult.success).toBeTruthy();
// Test 2: Email with spam-like content
const spamEmail = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'You are a WINNER!',
text: 'Click here to claim your lottery prize! Act now! 100% guarantee!'
});
const spamResult = await smtpClient.sendMail(spamEmail);
console.log('Spam-like email: Processed by server');
expect(spamResult.success).toBeTruthy();
await smtpClient.close();
});
tap.test('CSEC-10: Greylisting simulation', async () => {
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
const email = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Greylist test',
text: 'Testing greylisting mechanism'
});
// Test server doesn't implement greylisting, so this should succeed
const result = await smtpClient.sendMail(email);
console.log('Email sent (greylisting not active on test server)');
expect(result.success).toBeTruthy();
await smtpClient.close();
});
tap.test('CSEC-10: DNS blacklist checking', async () => {
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
// Test with various domains
const testDomains = [
{ from: 'sender@clean-domain.com', expected: true },
{ from: 'sender@spam-domain.com', expected: true } // Test server accepts all
];
for (const test of testDomains) {
const email = new Email({
from: test.from,
to: ['recipient@example.com'],
subject: 'DNSBL test',
text: 'Testing DNSBL checking'
});
const result = await smtpClient.sendMail(email);
console.log(`Sender ${test.from}: ${result.success ? 'accepted' : 'rejected'}`);
expect(result.success).toBeTruthy();
}
await smtpClient.close();
});
tap.test('CSEC-10: Connection behavior analysis', async () => {
// Test normal behavior
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
const email = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Behavior test',
text: 'Testing normal email sending behavior'
});
const result = await smtpClient.sendMail(email);
console.log('Normal behavior: Accepted');
expect(result.success).toBeTruthy();
await smtpClient.close();
});
tap.test('CSEC-10: Attachment scanning', async () => {
const smtpClient = createTestSmtpClient({
host: testServer.hostname,
port: testServer.port,
secure: false
});
// Test 1: Safe attachment
const safeEmail = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Document for review',
text: 'Please find the attached document.',
attachments: [{
filename: 'report.pdf',
content: Buffer.from('PDF content here'),
contentType: 'application/pdf'
}]
});
const safeResult = await smtpClient.sendMail(safeEmail);
console.log('Safe attachment: Accepted');
expect(safeResult.success).toBeTruthy();
// Test 2: Potentially dangerous attachment (test server accepts all)
const exeEmail = new Email({
from: 'sender@example.com',
to: ['recipient@example.com'],
subject: 'Important update',
text: 'Please run the attached file',
attachments: [{
filename: 'update.exe',
content: Buffer.from('MZ\x90\x00\x03'), // Fake executable header
contentType: 'application/octet-stream'
}]
});
const exeResult = await smtpClient.sendMail(exeEmail);
console.log('Executable attachment: Processed by server');
expect(exeResult.success).toBeTruthy();
await smtpClient.close();
});
tap.test('cleanup test SMTP server', async () => {
if (testServer) {
await stopTestServer(testServer);
}
});
tap.start();