initial commit
This commit is contained in:
commit
619cb97fa3
23 changed files with 9242 additions and 0 deletions
103
examples/basic-usage.ts
Normal file
103
examples/basic-usage.ts
Normal file
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/env ts-node
|
||||
|
||||
/**
|
||||
* Basic usage example for SMTP over WebSocket client
|
||||
*/
|
||||
|
||||
import { SMTPOverWSClient, MessagePriority } from '../src/index';
|
||||
|
||||
async function basicUsageExample() {
|
||||
console.log('Starting SMTP WebSocket Client Basic Example\n');
|
||||
|
||||
// Create client with basic configuration
|
||||
const client = new SMTPOverWSClient({
|
||||
url: 'ws://localhost:3000/smtp', // Replace with your server URL
|
||||
apiKey: 'your-api-key-here', // Replace with your API key
|
||||
debug: true,
|
||||
reconnectInterval: 5000,
|
||||
maxReconnectAttempts: 3
|
||||
});
|
||||
|
||||
// Set up event listeners
|
||||
client.on('connected', () => {
|
||||
console.log('Connected to WebSocket server');
|
||||
});
|
||||
|
||||
client.on('authenticated', () => {
|
||||
console.log('Authentication successful');
|
||||
});
|
||||
|
||||
client.on('disconnected', (reason) => {
|
||||
console.log(`Disconnected: ${reason || 'Unknown reason'}`);
|
||||
});
|
||||
|
||||
client.on('error', (error) => {
|
||||
console.error('Client error:', error.message);
|
||||
});
|
||||
|
||||
client.on('messageQueued', (messageId, queueSize) => {
|
||||
console.log(`Message ${messageId} queued (Queue size: ${queueSize})`);
|
||||
});
|
||||
|
||||
client.on('messageProcessed', (messageId, responseTime) => {
|
||||
console.log(`Message ${messageId} processed in ${responseTime}ms`);
|
||||
});
|
||||
|
||||
try {
|
||||
console.log('Sending SMTP commands...\n');
|
||||
|
||||
// Send basic SMTP sequence
|
||||
const ehloResponse = await client.sendSMTPCommand('EHLO example.com\r\n');
|
||||
console.log('EHLO Response:', ehloResponse.trim());
|
||||
|
||||
const mailFromResponse = await client.sendSMTPCommand('MAIL FROM: <sender@example.com>\r\n');
|
||||
console.log('MAIL FROM Response:', mailFromResponse.trim());
|
||||
|
||||
const rcptToResponse = await client.sendSMTPCommand('RCPT TO: <recipient@example.com>\r\n');
|
||||
console.log('RCPT TO Response:', rcptToResponse.trim());
|
||||
|
||||
const dataResponse = await client.sendSMTPCommand('DATA\r\n');
|
||||
console.log('DATA Response:', dataResponse.trim());
|
||||
|
||||
// Send email content
|
||||
const emailContent = `From: sender@example.com\r\nTo: recipient@example.com\r\nSubject: Test Email\r\n\r\nThis is a test email.\r\n.\r\n`;
|
||||
const contentResponse = await client.sendSMTPCommand(emailContent);
|
||||
console.log('Content Response:', contentResponse.trim());
|
||||
|
||||
const quitResponse = await client.sendSMTPCommand('QUIT\r\n');
|
||||
console.log('QUIT Response:', quitResponse.trim());
|
||||
|
||||
console.log('\nAll SMTP commands sent successfully!');
|
||||
|
||||
// Display statistics
|
||||
const stats = client.getStats();
|
||||
console.log('\nClient Statistics:');
|
||||
console.log(` Messages Queued: ${stats.messagesQueued}`);
|
||||
console.log(` Messages Processed: ${stats.messagesProcessed}`);
|
||||
console.log(` Messages Failed: ${stats.messagesFailed}`);
|
||||
console.log(` Average Response Time: ${stats.averageResponseTime.toFixed(2)}ms`);
|
||||
console.log(` Connection Uptime: ${stats.connectionUptime}ms`);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error during SMTP communication:', error);
|
||||
} finally {
|
||||
console.log('\nShutting down client...');
|
||||
await client.shutdown();
|
||||
console.log('Client shutdown complete');
|
||||
}
|
||||
}
|
||||
|
||||
// Run the example
|
||||
if (require.main === module) {
|
||||
basicUsageExample()
|
||||
.then(() => {
|
||||
console.log('\nBasic usage example completed successfully');
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('\nExample failed:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
export { basicUsageExample };
|
Loading…
Add table
Add a link
Reference in a new issue