/** * Email Template Testing Script * * Test email templates with nodemailer test account * Preview URL will be shown in console */ import nodemailer from 'nodemailer'; import { getRequestCreatedEmail, getApprovalRequestEmail, getMultiApproverRequestEmail, RequestCreatedData, ApprovalRequestData, MultiApproverRequestData } from './index'; /** * Send test email and get preview URL */ async function sendTestEmail() { try { console.log('šŸš€ Creating nodemailer test account...'); // Create a test account automatically (free, no signup needed) const testAccount = await nodemailer.createTestAccount(); console.log('āœ… Test account created:', testAccount.user); // Create transporter with test SMTP details const transporter = nodemailer.createTransport({ host: testAccount.smtp.host, port: testAccount.smtp.port, secure: testAccount.smtp.secure, auth: { user: testAccount.user, pass: testAccount.pass } }); // Sample data for Request Created email const requestCreatedData: RequestCreatedData = { recipientName: 'John Doe', requestId: 'REQ-2025-12-0013', requestTitle: 'New Equipment Purchase Request', initiatorName: 'John Doe', firstApproverName: 'Jane Smith', requestType: 'Purchase', priority: 'HIGH', requestDate: 'Dec 04, 2025', requestTime: '02:30 PM', totalApprovers: 3, expectedTAT: 48, viewDetailsLink: 'http://localhost:3000/request/REQ-2025-12-0013', companyName: 'Royal Enfield' }; // Sample data for Approval Request email const approvalRequestData: ApprovalRequestData = { recipientName: 'Jane Smith', requestId: 'REQ-2025-12-0013', approverName: 'Jane Smith', initiatorName: 'John Doe', requestType: 'Purchase', requestDescription: 'Requesting approval for new equipment purchase worth $5,000. This includes 2 new motorcycles for the testing department.', priority: 'HIGH', requestDate: 'Dec 04, 2025', requestTime: '02:30 PM', viewDetailsLink: 'http://localhost:3000/request/REQ-2025-12-0013', companyName: 'Royal Enfield' }; // Sample data for Multi-Approver Request email const multiApproverData: MultiApproverRequestData = { ...approvalRequestData, approverLevel: 2, totalApprovers: 3, approversList: [ { name: 'Sarah Johnson', status: 'approved', date: 'Dec 03, 2025', levelNumber: 1 }, { name: 'Jane Smith', status: 'current', levelNumber: 2 }, { name: 'Michael Brown', status: 'awaiting', levelNumber: 3 } ] }; console.log('\nšŸ“§ Sending test emails...\n'); // Test 1: Request Created Email const html1 = getRequestCreatedEmail(requestCreatedData); const info1 = await transporter.sendMail({ from: '"Royal Enfield Workflow" ', to: 'initiator@example.com', subject: '[REQ-2025-12-0013] Request Created Successfully', html: html1 }); console.log('āœ… Test 1: Request Created Email'); console.log(' Preview URL:', nodemailer.getTestMessageUrl(info1)); console.log(''); // Test 2: Approval Request Email (Single) const html2 = getApprovalRequestEmail(approvalRequestData); const info2 = await transporter.sendMail({ from: '"Royal Enfield Workflow" ', to: 'approver@example.com', subject: '[REQ-2025-12-0013] Approval Request - Action Required', html: html2 }); console.log('āœ… Test 2: Approval Request Email'); console.log(' Preview URL:', nodemailer.getTestMessageUrl(info2)); console.log(''); // Test 3: Multi-Approver Request Email const html3 = getMultiApproverRequestEmail(multiApproverData); const info3 = await transporter.sendMail({ from: '"Royal Enfield Workflow" ', to: 'approver-level2@example.com', subject: '[REQ-2025-12-0013] Multi-Level Approval Request - Your Turn', html: html3 }); console.log('āœ… Test 3: Multi-Approver Request Email'); console.log(' Preview URL:', nodemailer.getTestMessageUrl(info3)); console.log(''); console.log('šŸŽ‰ All test emails sent successfully!'); console.log('\nšŸ’” Click the Preview URLs above to view the emails in your browser'); console.log('šŸ“Œ These are real previews hosted by Ethereal Email (nodemailer test service)'); } catch (error) { console.error('āŒ Error sending test email:', error); throw error; } } // Run the test sendTestEmail() .then(() => { console.log('\nāœ… Test completed successfully'); process.exit(0); }) .catch((error) => { console.error('\nāŒ Test failed:', error); process.exit(1); });