@timshel_npm/maildev 3.2.18 → 3.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/lib/mailserver.d.ts +1 -1
- package/dist/lib/mailserver.js +12 -11
- package/dist/lib/routes.js +2 -3
- package/package.json +12 -13
package/README.md
CHANGED
|
@@ -30,8 +30,8 @@ Or can be installed using [Github](https://docs.npmjs.com/cli/v10/configuring-np
|
|
|
30
30
|
Ex:
|
|
31
31
|
```json
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"maildev": "github:timshel/maildev#3.2.
|
|
34
|
-
"maildev": "npm:@timshel_npm/maildev@^3.2.
|
|
33
|
+
"maildev": "github:timshel/maildev#3.2.19",
|
|
34
|
+
"maildev": "npm:@timshel_npm/maildev@^3.2.19"
|
|
35
35
|
}
|
|
36
36
|
```
|
|
37
37
|
|
package/dist/lib/mailserver.d.ts
CHANGED
package/dist/lib/mailserver.js
CHANGED
|
@@ -255,13 +255,14 @@ class MailServer {
|
|
|
255
255
|
/**
|
|
256
256
|
* Get an email by id
|
|
257
257
|
*/
|
|
258
|
-
getEmail(id) {
|
|
258
|
+
getEmail(id, setRead) {
|
|
259
259
|
return __awaiter(this, void 0, void 0, function* () {
|
|
260
260
|
const envelope = this.store.find(function (elt) {
|
|
261
261
|
return elt.id === id;
|
|
262
262
|
});
|
|
263
263
|
if (envelope) {
|
|
264
|
-
|
|
264
|
+
envelope.isRead = setRead || envelope.isRead;
|
|
265
|
+
return getDiskEmail(this.mailDir, envelope.id, envelope.isRead).then((mail) => {
|
|
265
266
|
if (mail.html) {
|
|
266
267
|
// sanitize html
|
|
267
268
|
const window = new JSDOM("").window;
|
|
@@ -301,7 +302,7 @@ class MailServer {
|
|
|
301
302
|
getEmailHTML(id_1) {
|
|
302
303
|
return __awaiter(this, arguments, void 0, function* (id, baseUrl = "") {
|
|
303
304
|
baseUrl = baseUrl ? "//" + baseUrl : "";
|
|
304
|
-
const mail = yield this.getEmail(id);
|
|
305
|
+
const mail = yield this.getEmail(id, false);
|
|
305
306
|
if (typeof mail.html === "string") {
|
|
306
307
|
var html = mail.html;
|
|
307
308
|
const getFileUrl = function (filename) {
|
|
@@ -337,7 +338,7 @@ class MailServer {
|
|
|
337
338
|
}
|
|
338
339
|
getAllEmail() {
|
|
339
340
|
const emails = this.store.map((elt) => {
|
|
340
|
-
return this.getEmail(elt.id);
|
|
341
|
+
return this.getEmail(elt.id, false);
|
|
341
342
|
});
|
|
342
343
|
return Promise.all(emails);
|
|
343
344
|
}
|
|
@@ -391,7 +392,7 @@ class MailServer {
|
|
|
391
392
|
*/
|
|
392
393
|
getEmailAttachment(id, filename) {
|
|
393
394
|
return __awaiter(this, void 0, void 0, function* () {
|
|
394
|
-
const mail = yield this.getEmail(id);
|
|
395
|
+
const mail = yield this.getEmail(id, false);
|
|
395
396
|
if (mail.attachments.length === 0) {
|
|
396
397
|
throw new Error("Email has no attachments");
|
|
397
398
|
}
|
|
@@ -442,7 +443,7 @@ class MailServer {
|
|
|
442
443
|
let saved = chunk.map(function (file) {
|
|
443
444
|
return __awaiter(this, void 0, void 0, function* () {
|
|
444
445
|
const id = path.parse(file).name;
|
|
445
|
-
const email = yield getDiskEmail(self.mailDir, id);
|
|
446
|
+
const email = yield getDiskEmail(self.mailDir, id, false);
|
|
446
447
|
return saveEmailToStore(self, email);
|
|
447
448
|
});
|
|
448
449
|
});
|
|
@@ -470,16 +471,16 @@ function createMailDir(mailDir) {
|
|
|
470
471
|
fs.mkdirSync(mailDir, { recursive: true });
|
|
471
472
|
logger.info("MailDev using directory %s", mailDir);
|
|
472
473
|
}
|
|
473
|
-
function getDiskEmail(mailDir, id) {
|
|
474
|
+
function getDiskEmail(mailDir, id, isRead) {
|
|
474
475
|
return __awaiter(this, void 0, void 0, function* () {
|
|
475
476
|
const emlPath = path.join(mailDir, id + ".eml");
|
|
476
477
|
const data = yield fs_1.promises.readFile(emlPath, "utf8");
|
|
477
478
|
const stat = yield fs_1.promises.stat(emlPath);
|
|
478
479
|
const parsedMail = yield (0, mailparser_1.parse)(data);
|
|
479
|
-
return buildMail(id, parsedMail, stat.size);
|
|
480
|
+
return buildMail(id, parsedMail, stat.size, isRead);
|
|
480
481
|
});
|
|
481
482
|
}
|
|
482
|
-
function buildMail(id, parsedMail, size) {
|
|
483
|
+
function buildMail(id, parsedMail, size, isRead) {
|
|
483
484
|
return __awaiter(this, void 0, void 0, function* () {
|
|
484
485
|
const envelope = {
|
|
485
486
|
id: id,
|
|
@@ -488,7 +489,7 @@ function buildMail(id, parsedMail, size) {
|
|
|
488
489
|
date: parsedMail.date,
|
|
489
490
|
subject: parsedMail.subject,
|
|
490
491
|
hasAttachment: parsedMail.attachments.length > 0,
|
|
491
|
-
isRead
|
|
492
|
+
isRead,
|
|
492
493
|
};
|
|
493
494
|
return Object.assign({ id: envelope.id, envelope, calculatedBcc: (0, bcc_1.calculateBcc)(envelope.to, parsedMail.to, parsedMail.cc), size, sizeHuman: utils.formatBytes(size) }, parsedMail);
|
|
494
495
|
});
|
|
@@ -541,7 +542,7 @@ function handleDataStream(mailServer, stream, session, callback) {
|
|
|
541
542
|
});
|
|
542
543
|
const parsed = yield (0, mailparser_1.parse)(stream.pipe(pt));
|
|
543
544
|
yield streamEnd;
|
|
544
|
-
const mail = yield buildMail(id, parsed, size);
|
|
545
|
+
const mail = yield buildMail(id, parsed, size, false);
|
|
545
546
|
return saveEmailToStore(mailServer, mail);
|
|
546
547
|
});
|
|
547
548
|
}
|
package/dist/lib/routes.js
CHANGED
|
@@ -34,9 +34,8 @@ function routes(app, mailserver, basePathname) {
|
|
|
34
34
|
// Get single email
|
|
35
35
|
router.get("/email/:id", function (req, res) {
|
|
36
36
|
mailserver
|
|
37
|
-
.getEmail(req.params.id)
|
|
37
|
+
.getEmail(req.params.id, true)
|
|
38
38
|
.then((mail) => {
|
|
39
|
-
mail.envelope.isRead = true; // Mark the email as 'read'
|
|
40
39
|
res.status(200).json(mail);
|
|
41
40
|
})
|
|
42
41
|
.catch((err) => res.status(404).json({ error: err.message }));
|
|
@@ -116,7 +115,7 @@ function routes(app, mailserver, basePathname) {
|
|
|
116
115
|
// Relay the email
|
|
117
116
|
router.post("/email/:id/relay{/:relayTo}", function (req, res) {
|
|
118
117
|
mailserver
|
|
119
|
-
.getEmail(req.params.id)
|
|
118
|
+
.getEmail(req.params.id, false)
|
|
120
119
|
.then((mail) => {
|
|
121
120
|
if (req.params.relayTo) {
|
|
122
121
|
if (emailRegexp.test(req.params.relayTo)) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timshel_npm/maildev",
|
|
3
3
|
"description": "SMTP Server with async API and Web Interface for viewing and testing emails during development",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.19",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"email",
|
|
7
7
|
"e-mail",
|
|
@@ -60,26 +60,25 @@
|
|
|
60
60
|
"commander": "14.0.3",
|
|
61
61
|
"compression": "1.8.1",
|
|
62
62
|
"cors": "2.8.6",
|
|
63
|
-
"dompurify": "3.
|
|
63
|
+
"dompurify": "3.4.1",
|
|
64
64
|
"express": "5.2.1",
|
|
65
|
-
"jsdom": "29.0
|
|
66
|
-
"mailparser": "3.9.
|
|
65
|
+
"jsdom": "29.1.0",
|
|
66
|
+
"mailparser": "3.9.8",
|
|
67
67
|
"mime": "4.1.0",
|
|
68
|
-
"nodemailer": "8.0.
|
|
69
|
-
"smtp-server": "3.18.
|
|
68
|
+
"nodemailer": "8.0.7",
|
|
69
|
+
"smtp-server": "3.18.4",
|
|
70
70
|
"socket.io": "4.8.3",
|
|
71
71
|
"wildstring": "1.0.9"
|
|
72
72
|
},
|
|
73
73
|
"overrides": {
|
|
74
|
-
"brace-expansion": "5.0.5",
|
|
75
74
|
"diff": "8.0.4",
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
75
|
+
"follow-redirects": "1.16.0",
|
|
76
|
+
"serialize-javascript": "7.0.5",
|
|
77
|
+
"uuid": "14.0.0"
|
|
79
78
|
},
|
|
80
79
|
"devDependencies": {
|
|
81
80
|
"@types/express": "5.0.6",
|
|
82
|
-
"@types/node": "20.19.
|
|
81
|
+
"@types/node": "20.19.39",
|
|
83
82
|
"expect": "30.3.0",
|
|
84
83
|
"http-proxy-middleware": "3.0.5",
|
|
85
84
|
"jest": "30.3.0",
|
|
@@ -87,10 +86,10 @@
|
|
|
87
86
|
"mocha": "11.7.5",
|
|
88
87
|
"nodemon": "3.1.14",
|
|
89
88
|
"nyc": "18.0.0",
|
|
90
|
-
"prettier": "3.8.
|
|
89
|
+
"prettier": "3.8.3",
|
|
91
90
|
"ts-node": "10.9.2",
|
|
92
91
|
"ts-node-dev": "2.0.0",
|
|
93
|
-
"typescript": "6.0.
|
|
92
|
+
"typescript": "6.0.3"
|
|
94
93
|
},
|
|
95
94
|
"engines": {
|
|
96
95
|
"node": ">=20.0.0"
|