Skip to content

Commit 8c493c0

Browse files
authored
Merge pull request #9 from deltaroe/envelope
Use envelope rcptTo instead of content to header for db collection
2 parents 8625721 + fe2fe85 commit 8c493c0

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

mailserver/emailHandler.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,22 @@ async function saveAttachment(attachmentFolder, attachment) {
3838
});
3939
}
4040

41-
async function saveEmailToDB(parsedEmail) {
42-
console.log("parsedEmail", parsedEmail.to.value[0].address);
41+
async function saveEmailToDB(parsedEmail, toAddress) {
42+
if (!("to" in parsedEmail)) {
43+
parsedEmail.to = {
44+
text: "",
45+
value: [{ address: "" }]
46+
}
47+
}
48+
console.log("parsedEmail", toAddress);
49+
4350
parsedEmail.to.value[0].address = parsedEmail.to.value[0].address.toLowerCase();
4451
parsedEmail.from.value[0].address = parsedEmail.from.value[0].address.toLowerCase();
4552
parsedEmail.to.text = parsedEmail.to.text.toLowerCase();
46-
4753

4854
try {
4955
const db = getDB();
50-
const collection = db.collection(parsedEmail.to.value[0].address);
56+
const collection = db.collection(toAddress);
5157
const attachments = parsedEmail.attachments;
5258
// Generate a new MongoDB ObjectId
5359
const objectId = new ObjectId();
@@ -76,10 +82,12 @@ async function saveEmailToDB(parsedEmail) {
7682
}
7783
}
7884

79-
async function handleIncomingEmail(stream) {
85+
async function handleIncomingEmail(stream, session) {
8086
try {
8187
const parsedEmail = await simpleParser(stream);
82-
await saveEmailToDB(parsedEmail);
88+
for (toAddress of session.envelope.rcptTo) {
89+
await saveEmailToDB(parsedEmail, toAddress.address.toLowerCase());
90+
}
8391
} catch (error) {
8492
console.error("Error parsing or saving email:", error);
8593
throw error;

mailserver/emailRoutes.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { collectionName } = require("./config");
44
const { ObjectId } = require("mongodb");
55
const path = require("path");
66
const fs = require("fs");
7-
const {deleteEmailAndAttachments} = require("./emailHandler");
7+
const { deleteEmailAndAttachments } = require("./emailHandler");
88
const e = require("express");
99

1010
const router = express.Router();
@@ -17,7 +17,7 @@ router.get("/emails/:emailId", async (req, res) => {
1717
console.log("emailId", emailId);
1818
const db = getDB();
1919
const collection = db.collection(emailId);
20-
const emails = await collection.find({ "to.text": emailId }).toArray();
20+
const emails = await collection.find({}).toArray();
2121

2222
if (emails.length === 0) {
2323
return res.status(404).json({ message: "No emails found for the provided email ID" });
@@ -53,10 +53,7 @@ router.get("/emails-list/:emailId", async (req, res) => {
5353
const db = getDB();
5454
const collection = db.collection(emailId);
5555
const emails = await collection
56-
.find(
57-
{ "to.text": emailId.toLocaleLowerCase() },
58-
{ projection: { "from.text": 1, subject: 1, date: 1, readStatus: 1 } } // Only fetch the required fields
59-
)
56+
.find({}, { projection: { "from.text": 1, subject: 1, date: 1, readStatus: 1 } }) // Only fetch the required fields
6057
.sort({ date: -1 }) // Sort by date in descending order
6158
.toArray();
6259
console.log("emails", emails);

mailserver/server.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ async function startSMTPServer() {
1616
const server = new SMTPServer({
1717
authOptional: true,
1818
onData(stream, session, callback) {
19-
handleIncomingEmail(stream)
19+
handleIncomingEmail(stream, session)
2020
.then(() => callback())
2121
.catch((error) => callback(error));
2222
},
@@ -82,4 +82,3 @@ async function startServer() {
8282
}
8383

8484
startServer();
85-

0 commit comments

Comments
 (0)