Skip to content

Commit

Permalink
Merge pull request #9 from deltaroe/envelope
Browse files Browse the repository at this point in the history
Use envelope rcptTo instead of content to header for db collection
  • Loading branch information
hppanpaliya authored Jun 24, 2024
2 parents 8625721 + fe2fe85 commit 8c493c0
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
20 changes: 14 additions & 6 deletions mailserver/emailHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,22 @@ async function saveAttachment(attachmentFolder, attachment) {
});
}

async function saveEmailToDB(parsedEmail) {
console.log("parsedEmail", parsedEmail.to.value[0].address);
async function saveEmailToDB(parsedEmail, toAddress) {
if (!("to" in parsedEmail)) {
parsedEmail.to = {
text: "",
value: [{ address: "" }]
}
}
console.log("parsedEmail", toAddress);

parsedEmail.to.value[0].address = parsedEmail.to.value[0].address.toLowerCase();
parsedEmail.from.value[0].address = parsedEmail.from.value[0].address.toLowerCase();
parsedEmail.to.text = parsedEmail.to.text.toLowerCase();


try {
const db = getDB();
const collection = db.collection(parsedEmail.to.value[0].address);
const collection = db.collection(toAddress);
const attachments = parsedEmail.attachments;
// Generate a new MongoDB ObjectId
const objectId = new ObjectId();
Expand Down Expand Up @@ -76,10 +82,12 @@ async function saveEmailToDB(parsedEmail) {
}
}

async function handleIncomingEmail(stream) {
async function handleIncomingEmail(stream, session) {
try {
const parsedEmail = await simpleParser(stream);
await saveEmailToDB(parsedEmail);
for (toAddress of session.envelope.rcptTo) {
await saveEmailToDB(parsedEmail, toAddress.address.toLowerCase());
}
} catch (error) {
console.error("Error parsing or saving email:", error);
throw error;
Expand Down
9 changes: 3 additions & 6 deletions mailserver/emailRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const { collectionName } = require("./config");
const { ObjectId } = require("mongodb");
const path = require("path");
const fs = require("fs");
const {deleteEmailAndAttachments} = require("./emailHandler");
const { deleteEmailAndAttachments } = require("./emailHandler");
const e = require("express");

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

if (emails.length === 0) {
return res.status(404).json({ message: "No emails found for the provided email ID" });
Expand Down Expand Up @@ -53,10 +53,7 @@ router.get("/emails-list/:emailId", async (req, res) => {
const db = getDB();
const collection = db.collection(emailId);
const emails = await collection
.find(
{ "to.text": emailId.toLocaleLowerCase() },
{ projection: { "from.text": 1, subject: 1, date: 1, readStatus: 1 } } // Only fetch the required fields
)
.find({}, { projection: { "from.text": 1, subject: 1, date: 1, readStatus: 1 } }) // Only fetch the required fields
.sort({ date: -1 }) // Sort by date in descending order
.toArray();
console.log("emails", emails);
Expand Down
3 changes: 1 addition & 2 deletions mailserver/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ async function startSMTPServer() {
const server = new SMTPServer({
authOptional: true,
onData(stream, session, callback) {
handleIncomingEmail(stream)
handleIncomingEmail(stream, session)
.then(() => callback())
.catch((error) => callback(error));
},
Expand Down Expand Up @@ -82,4 +82,3 @@ async function startServer() {
}

startServer();

0 comments on commit 8c493c0

Please sign in to comment.