63 lines
1.6 KiB
JavaScript
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}`);
|
|
});
|