email-unlimit/backend/app.js

63 lines
1.6 KiB
JavaScript

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}`);
});