const express = require('express'); const cors = require('cors'); const db = require('./db'); const { SMTPServer } = require('smtp-server'); const { saveEmail } = require('./saveEmail'); const app = express(); const apiPort = 5182; const smtpPort = 25; app.use(cors()); app.use(express.json()); // API to get messages for a recipient app.get('/api/messages', async (req, res) => { const { recipient } = req.query; if (!recipient) { return res.status(400).send('Recipient is required'); } try { const [rows] = await db.execute( 'SELECT id, sender, subject, body, received_at FROM emails WHERE recipient = ? ORDER BY received_at DESC', [recipient] ); res.json(rows); } catch (error) { console.error('Failed to fetch emails:', error); res.status(500).send('Failed to fetch emails'); } }); // Start API server app.listen(apiPort, () => { console.log(`Backend API server listening at http://localhost:${apiPort}`); }); // Configure and start SMTP server const smtpServer = new SMTPServer({ authOptional: true, disabledCommands: ['AUTH'], onData(stream, session, callback) { console.log('Receiving email...'); saveEmail(stream) .then(() => { console.log('Email processed and saved successfully.'); callback(); // Accept the message }) .catch(err => { console.error('Error processing email:', err); callback(new Error('Failed to process email.')); }); }, }); smtpServer.on('error', err => { console.error('SMTP Server Error:', err.message); }); smtpServer.listen(smtpPort, () => { console.log(`SMTP server listening on port ${smtpPort}`); });