mailparser 3.7.4 → 3.8.1
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/.github/workflows/release.yaml +16 -17
- package/.github/workflows/stale.yml +24 -0
- package/.github/workflows/test.yml +3 -3
- package/.ncurc.js +3 -6
- package/.prettierignore +3 -0
- package/.prettierrc.js +2 -0
- package/.release-please-manifest.json +3 -0
- package/CHANGELOG.md +45 -0
- package/LICENSE +1 -1
- package/eslint.config.js +33 -0
- package/lib/mail-parser.js +14 -5
- package/package.json +12 -8
- package/release-please-config.json +9 -0
|
@@ -6,32 +6,31 @@ on:
|
|
|
6
6
|
permissions:
|
|
7
7
|
contents: write
|
|
8
8
|
pull-requests: write
|
|
9
|
+
issues: write
|
|
9
10
|
id-token: write
|
|
10
11
|
|
|
11
12
|
name: release
|
|
12
13
|
jobs:
|
|
13
14
|
release-please:
|
|
14
15
|
runs-on: ubuntu-latest
|
|
16
|
+
outputs:
|
|
17
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
15
18
|
steps:
|
|
16
|
-
- uses:
|
|
19
|
+
- uses: googleapis/release-please-action@v4
|
|
17
20
|
id: release
|
|
21
|
+
|
|
22
|
+
publish:
|
|
23
|
+
needs: release-please
|
|
24
|
+
if: ${{ needs.release-please.outputs.release_created }}
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
id-token: write
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
- uses: actions/setup-node@v4
|
|
18
32
|
with:
|
|
19
|
-
|
|
20
|
-
package-name: ${{vars.NPM_MODULE_NAME}}
|
|
21
|
-
pull-request-title-pattern: 'chore${scope}: release ${version} [skip-ci]'
|
|
22
|
-
# The logic below handles the npm publication:
|
|
23
|
-
- uses: actions/checkout@v3
|
|
24
|
-
# these if statements ensure that a publication only occurs when
|
|
25
|
-
# a new release is created:
|
|
26
|
-
if: ${{ steps.release.outputs.release_created }}
|
|
27
|
-
- uses: actions/setup-node@v3
|
|
28
|
-
with:
|
|
29
|
-
node-version: 18
|
|
33
|
+
node-version: 24
|
|
30
34
|
registry-url: 'https://registry.npmjs.org'
|
|
31
|
-
if: ${{ steps.release.outputs.release_created }}
|
|
32
35
|
- run: npm ci
|
|
33
|
-
if: ${{ steps.release.outputs.release_created }}
|
|
34
36
|
- run: npm publish --provenance --access public
|
|
35
|
-
env:
|
|
36
|
-
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
|
37
|
-
if: ${{ steps.release.outputs.release_created }}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: 'Close stale issues and PRs'
|
|
2
|
+
on:
|
|
3
|
+
schedule:
|
|
4
|
+
- cron: '30 1 * * *'
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
stale:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/stale@v8
|
|
11
|
+
with:
|
|
12
|
+
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
|
|
13
|
+
stale-pr-message: 'This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 10 days.'
|
|
14
|
+
close-issue-message: 'This issue was closed because it has been stalled for 15 days with no activity.'
|
|
15
|
+
close-pr-message: 'This PR was closed because it has been stalled for 20 days with no activity.'
|
|
16
|
+
days-before-issue-stale: 30
|
|
17
|
+
days-before-pr-stale: 45
|
|
18
|
+
days-before-issue-close: 15
|
|
19
|
+
days-before-pr-close: 20
|
|
20
|
+
stale-issue-label: 'no-issue-activity'
|
|
21
|
+
exempt-issue-labels: 'pending,work-in-progress'
|
|
22
|
+
stale-pr-label: 'no-pr-activity'
|
|
23
|
+
exempt-pr-labels: 'awaiting-approval,work-in-progress'
|
|
24
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -8,13 +8,13 @@ jobs:
|
|
|
8
8
|
test:
|
|
9
9
|
strategy:
|
|
10
10
|
matrix:
|
|
11
|
-
node: [
|
|
11
|
+
node: [22.x, 24.x]
|
|
12
12
|
os: [ubuntu-latest]
|
|
13
13
|
runs-on: ${{ matrix.os }}
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
16
|
- name: Use Node.js ${{ matrix.node }}
|
|
17
|
-
uses: actions/setup-node@
|
|
17
|
+
uses: actions/setup-node@v4
|
|
18
18
|
with:
|
|
19
19
|
node-version: ${{ matrix.node }}
|
|
20
20
|
- run: npm install
|
package/.ncurc.js
CHANGED
package/.prettierignore
ADDED
package/.prettierrc.js
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.8.1](https://github.com/nodemailer/mailparser/compare/mailparser-v3.8.0...mailparser-v3.8.1) (2025-11-05)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* trigger new build ([7f2eb78](https://github.com/nodemailer/mailparser/commit/7f2eb78eda722e369b532b836e02b631d2cbb31c))
|
|
9
|
+
|
|
10
|
+
## [3.8.0](https://github.com/nodemailer/mailparser/compare/mailparser-v3.7.5...mailparser-v3.8.0) (2025-11-04)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **events:** Emit a new headerLines event to gain access the raw headers ([#364](https://github.com/nodemailer/mailparser/issues/364)) ([d33d7ec](https://github.com/nodemailer/mailparser/commit/d33d7ec4b8e32a4eb7a9a664cec5fdb545c274af))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* :arrow_up: update nodemailer dependency to resolve security issue GHSA-9h6g-pr28-7cqp ([#357](https://github.com/nodemailer/mailparser/issues/357)) ([8bc4225](https://github.com/nodemailer/mailparser/commit/8bc42251fca6f538ece599f0a5bebe09b0aeff4f))
|
|
21
|
+
* 150 ([919f69a](https://github.com/nodemailer/mailparser/commit/919f69a49eb1326431c27c7034050498ca504822))
|
|
22
|
+
* 272: Throw TypeError for invalid input. ([abd7e43](https://github.com/nodemailer/mailparser/commit/abd7e43d90e533921c13ed8044a892761ef0535d))
|
|
23
|
+
* 34, bump version ([09aa0bd](https://github.com/nodemailer/mailparser/commit/09aa0bd59c1a70229567ff830adfd44c01605c2f))
|
|
24
|
+
* bumped deps ([9a13f4e](https://github.com/nodemailer/mailparser/commit/9a13f4efca4b209a40f4d57d2edbd019706a82c7))
|
|
25
|
+
* Bumped deps ([bb9c014](https://github.com/nodemailer/mailparser/commit/bb9c014c061def565183205a3ba3d269680f8271))
|
|
26
|
+
* Bumped deps ([9e084f9](https://github.com/nodemailer/mailparser/commit/9e084f9f265ddcfbf8ad3a3e68fc0645d4eb9d1d))
|
|
27
|
+
* Bumped mailsplit to fix flowed parser ([da753e4](https://github.com/nodemailer/mailparser/commit/da753e45ab6d335429bbdb38c5457d04d893d05e))
|
|
28
|
+
* capture decoder end event to use on cleanup ([4e367f7](https://github.com/nodemailer/mailparser/commit/4e367f7fda2505b9edb8e195eb5b1a8e1d1531fc))
|
|
29
|
+
* **deploy:** added auto-deployment ([d6eb56f](https://github.com/nodemailer/mailparser/commit/d6eb56fe09fe8b415e5bbf2e53704f6788ca0fee))
|
|
30
|
+
* **deps:** Bumped deps ([db842ad](https://github.com/nodemailer/mailparser/commit/db842addd36e2fe94d0c4b466da80719a36f47ac))
|
|
31
|
+
* **deps:** Bumped deps to fix issue with missing whitespace ([92884d0](https://github.com/nodemailer/mailparser/commit/92884d0619efa77042ecc35fbc887e93a59e5a93))
|
|
32
|
+
* **deps:** Bumped Nodemailer to fix issue with long data URI's ([d24f96e](https://github.com/nodemailer/mailparser/commit/d24f96e1ff6becccf3ba7f10798481287e0c96b0))
|
|
33
|
+
* **deps:** Replaced 'punycode' with 'punycode.js' module ([4a15157](https://github.com/nodemailer/mailparser/commit/4a15157dc9a815aa0e756d9e6ae0e8631842c447))
|
|
34
|
+
* error on ks_c_5601-1987 ([89572e0](https://github.com/nodemailer/mailparser/commit/89572e000d815704378261c753f59442397b8564))
|
|
35
|
+
* Fix produced text address list string according to rfc 2822 ([#340](https://github.com/nodemailer/mailparser/issues/340)) ([6bae600](https://github.com/nodemailer/mailparser/commit/6bae600a3f4a0452ee7ca43634a11939de7bcc6d))
|
|
36
|
+
* handle simpleParser input stream error ([faf9fc5](https://github.com/nodemailer/mailparser/commit/faf9fc5d8a27c1f88b7a126782d84ce2fef4d4bd))
|
|
37
|
+
* **punycode:** Fixes [#355](https://github.com/nodemailer/mailparser/issues/355) Deprecation warning of the punycode module ([#356](https://github.com/nodemailer/mailparser/issues/356)) ([0f35330](https://github.com/nodemailer/mailparser/commit/0f35330c87d715d38e8c853ae6c2f64d098b971d))
|
|
38
|
+
* **simple-parser:** Buffer.from(string) default encode is utf-8,when input string‘s encode is gbk,result has some garbled ([633e436](https://github.com/nodemailer/mailparser/commit/633e4369c93dc5122c8c8bee0fd2b057761e1223))
|
|
39
|
+
* **test:** updated test matrix (18, 20, 21) ([a2ba9c2](https://github.com/nodemailer/mailparser/commit/a2ba9c236dcd7f990c9d53a386ffaa5b564181b3))
|
|
40
|
+
|
|
41
|
+
## [3.7.5](https://github.com/nodemailer/mailparser/compare/v3.7.4...v3.7.5) (2025-10-09)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### Bug Fixes
|
|
45
|
+
|
|
46
|
+
* bumped deps ([9a13f4e](https://github.com/nodemailer/mailparser/commit/9a13f4efca4b209a40f4d57d2edbd019706a82c7))
|
|
47
|
+
|
|
3
48
|
## [3.7.4](https://github.com/nodemailer/mailparser/compare/v3.7.3...v3.7.4) (2025-06-29)
|
|
4
49
|
|
|
5
50
|
|
package/LICENSE
CHANGED
package/eslint.config.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { FlatCompat } = require('@eslint/eslintrc');
|
|
4
|
+
const js = require('@eslint/js');
|
|
5
|
+
|
|
6
|
+
const compat = new FlatCompat({
|
|
7
|
+
baseDirectory: __dirname,
|
|
8
|
+
recommendedConfig: js.configs.recommended
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
module.exports = [
|
|
12
|
+
{
|
|
13
|
+
ignores: ['node_modules/**', 'CHANGELOG.md']
|
|
14
|
+
},
|
|
15
|
+
...compat.extends('nodemailer', 'prettier'),
|
|
16
|
+
{
|
|
17
|
+
languageOptions: {
|
|
18
|
+
ecmaVersion: 2017,
|
|
19
|
+
sourceType: 'script'
|
|
20
|
+
},
|
|
21
|
+
rules: {
|
|
22
|
+
'no-useless-concat': 0,
|
|
23
|
+
'no-unused-vars': ['error', { caughtErrors: 'none' }],
|
|
24
|
+
indent: 'off',
|
|
25
|
+
quotes: 'off',
|
|
26
|
+
'linebreak-style': 'off',
|
|
27
|
+
semi: 'off',
|
|
28
|
+
'comma-dangle': 'off',
|
|
29
|
+
'comma-style': 'off',
|
|
30
|
+
'arrow-parens': 'off'
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
];
|
package/lib/mail-parser.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const mailsplit = require('mailsplit');
|
|
3
|
+
const mailsplit = require('@zone-eu/mailsplit');
|
|
4
4
|
const libmime = require('libmime');
|
|
5
5
|
const addressparser = require('nodemailer/lib/addressparser');
|
|
6
6
|
const Transform = require('stream').Transform;
|
|
7
7
|
const Splitter = mailsplit.Splitter;
|
|
8
|
+
const ChunkedPassthrough = mailsplit.ChunkedPassthrough;
|
|
8
9
|
const punycode = require('punycode.js');
|
|
9
|
-
const FlowedDecoder = require('mailsplit/lib/flowed-decoder');
|
|
10
|
+
const FlowedDecoder = require('@zone-eu/mailsplit/lib/flowed-decoder');
|
|
10
11
|
const StreamHash = require('./stream-hash');
|
|
11
12
|
const iconv = require('iconv-lite');
|
|
12
13
|
const { htmlToText } = require('html-to-text');
|
|
@@ -129,7 +130,11 @@ class MailParser extends Transform {
|
|
|
129
130
|
});
|
|
130
131
|
|
|
131
132
|
this.options = config || {};
|
|
133
|
+
this.chunkedPassthrough = new ChunkedPassthrough();
|
|
132
134
|
this.splitter = new Splitter(config);
|
|
135
|
+
|
|
136
|
+
this.chunkedPassthrough.pipe(this.splitter);
|
|
137
|
+
|
|
133
138
|
this.finished = false;
|
|
134
139
|
this.waitingEnd = false;
|
|
135
140
|
|
|
@@ -160,6 +165,10 @@ class MailParser extends Transform {
|
|
|
160
165
|
|
|
161
166
|
this.decoder = this.getDecoder();
|
|
162
167
|
|
|
168
|
+
this.chunkedPassthrough.on('error', err => {
|
|
169
|
+
this.splitter.emit('error', err);
|
|
170
|
+
});
|
|
171
|
+
|
|
163
172
|
this.splitter.on('readable', () => {
|
|
164
173
|
if (this.reading) {
|
|
165
174
|
return false;
|
|
@@ -250,8 +259,8 @@ class MailParser extends Transform {
|
|
|
250
259
|
return done();
|
|
251
260
|
}
|
|
252
261
|
|
|
253
|
-
if (this.
|
|
254
|
-
return this.
|
|
262
|
+
if (this.chunkedPassthrough.write(chunk) === false) {
|
|
263
|
+
return this.chunkedPassthrough.once('drain', () => {
|
|
255
264
|
done();
|
|
256
265
|
});
|
|
257
266
|
} else {
|
|
@@ -260,7 +269,7 @@ class MailParser extends Transform {
|
|
|
260
269
|
}
|
|
261
270
|
|
|
262
271
|
_flush(done) {
|
|
263
|
-
setImmediate(() => this.
|
|
272
|
+
setImmediate(() => this.chunkedPassthrough.end());
|
|
264
273
|
if (this.finished) {
|
|
265
274
|
return this.cleanup(done);
|
|
266
275
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mailparser",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.1",
|
|
4
4
|
"description": "Parse e-mails",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "grunt",
|
|
8
|
+
"format": "prettier --write .",
|
|
8
9
|
"update": "rm -rf node_modules package-lock.json && ncu -u && npm install"
|
|
9
10
|
},
|
|
10
11
|
"author": "Andris Reinman",
|
|
@@ -20,24 +21,27 @@
|
|
|
20
21
|
"encoding-japanese": "2.2.0",
|
|
21
22
|
"he": "1.2.0",
|
|
22
23
|
"html-to-text": "9.0.5",
|
|
23
|
-
"iconv-lite": "0.
|
|
24
|
+
"iconv-lite": "0.7.0",
|
|
24
25
|
"libmime": "5.3.7",
|
|
25
26
|
"linkify-it": "5.0.0",
|
|
26
|
-
"mailsplit": "5.4.
|
|
27
|
-
"nodemailer": "7.0.
|
|
27
|
+
"@zone-eu/mailsplit": "5.4.7",
|
|
28
|
+
"nodemailer": "7.0.10",
|
|
28
29
|
"punycode.js": "2.3.1",
|
|
29
|
-
"tlds": "1.
|
|
30
|
+
"tlds": "1.261.0"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
33
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
34
|
+
"@eslint/js": "^9.39.1",
|
|
32
35
|
"ajv": "8.17.1",
|
|
33
|
-
"eslint": "
|
|
36
|
+
"eslint": "^9.39.1",
|
|
34
37
|
"eslint-config-nodemailer": "1.2.0",
|
|
35
|
-
"eslint-config-prettier": "
|
|
38
|
+
"eslint-config-prettier": "10.1.8",
|
|
36
39
|
"grunt": "1.6.1",
|
|
37
40
|
"grunt-cli": "1.5.0",
|
|
38
41
|
"grunt-contrib-nodeunit": "5.0.0",
|
|
39
|
-
"grunt-eslint": "
|
|
42
|
+
"grunt-eslint": "26.0.0",
|
|
40
43
|
"iconv": "3.0.1",
|
|
44
|
+
"prettier": "^3.6.2",
|
|
41
45
|
"random-message": "1.1.0"
|
|
42
46
|
},
|
|
43
47
|
"repository": {
|