89 lines
No EOL
3.2 KiB
TypeScript
89 lines
No EOL
3.2 KiB
TypeScript
#!/usr/bin/env ts-node
|
|
|
|
/**
|
|
* Nodemailer transport example for SMTP over WebSocket
|
|
*/
|
|
|
|
import nodemailer from 'nodemailer';
|
|
import { createTransport } from '../src/index';
|
|
|
|
async function nodemailerTransportExample() {
|
|
console.log('Nodemailer SMTP WebSocket Transport Example\n');
|
|
|
|
// Create the WebSocket transport
|
|
const apiKey = process.env.MXRELAY_API_KEY || 'your-api-key-here';
|
|
const transport = createTransport(apiKey, {debug: false });
|
|
|
|
// Create Nodemailer transporter
|
|
const transporter = nodemailer.createTransport(transport);
|
|
|
|
// Verify the transport configuration
|
|
try {
|
|
console.log('Verifying transport configuration...');
|
|
await transporter.verify();
|
|
console.log('Transport verification successful\n');
|
|
} catch (error) {
|
|
console.error('Transport verification failed:', error);
|
|
return;
|
|
}
|
|
|
|
// Send a test email
|
|
try {
|
|
console.log('Sending test email...');
|
|
|
|
const info = await transporter.sendMail({
|
|
from: 'sender@example.com',
|
|
to: 'recipient@example.com',
|
|
subject: 'Test Email via SMTP WebSocket',
|
|
text: 'This email was sent using the SMTP WebSocket transport!',
|
|
html: `
|
|
<h1>Test Email</h1>
|
|
<p>This email was sent using the <strong>SMTP WebSocket transport</strong>!</p>
|
|
<p>Features:</p>
|
|
<ul>
|
|
<li>Automatic connection management</li>
|
|
<li>Queue-based message handling</li>
|
|
<li>Nodemailer compatibility</li>
|
|
<li>WebSocket-based SMTP relay</li>
|
|
</ul>
|
|
<p><strong>This email includes a test attachment!</strong></p>
|
|
`,
|
|
attachments: [
|
|
{
|
|
filename: 'test-attachment.txt',
|
|
content: Buffer.from(`This is a test attachment generated at ${new Date().toISOString()}\n\nRandom data: ${Math.random()}\nUUID: ${Date.now()}-${Math.random().toString(36).substr(2, 9)}\n\nFeatures tested:\n- File attachment support\n- Binary content handling\n- MIME multipart encoding\n- WebSocket SMTP transport\n\nEnd of test file.`, 'utf8'),
|
|
contentType: 'text/plain'
|
|
}
|
|
]
|
|
});
|
|
|
|
console.log('Email sent successfully!');
|
|
console.log('Message ID:', info.messageId);
|
|
console.log('Accepted recipients:', info.accepted);
|
|
console.log('Rejected recipients:', info.rejected);
|
|
console.log('Response:', info.response);
|
|
|
|
} catch (error) {
|
|
console.error('Failed to send email:', error);
|
|
} finally {
|
|
// Close the transport
|
|
console.log('\nClosing transport...');
|
|
await transport.close();
|
|
console.log('Transport closed');
|
|
}
|
|
}
|
|
|
|
// Run the example
|
|
if (require.main === module) {
|
|
nodemailerTransportExample()
|
|
.then(() => {
|
|
console.log('\nNodemailer transport example completed successfully');
|
|
process.exit(0);
|
|
})
|
|
.catch((error) => {
|
|
console.error('\nExample failed:', error);
|
|
process.exit(1);
|
|
});
|
|
}
|
|
|
|
export { nodemailerTransportExample }; |