Skip to content

Commit a35be75

Browse files
committed
feat: added hasDownloadOriginalButton option
1 parent c12d43e commit a35be75

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ NODE_DEBUG=preview-email node app.js
133133
* `openSimulator` (Boolean) - whether or not to open the iOS Simulator with the preview url file path (defaults to `true` via `process.env.NODE_ENV !== 'test'` and will only run if macOS detected and not in a CI environment)
134134
* `simpleParser` (Object) - an options Object to pass to `mailparser`'s `simpleParser` method (see [mailparser docs](https://nodemailer.com/extras/mailparser/#options) for available options – note that `Iconv` option is always overridden for safeguard)
135135
* `returnHTML` (Boolean) - whether or not to return HTML only – and subsequently not write nor open the file preview file (defaults to `false`)
136+
* `hasDownloadOriginalButton` (Boolean) - whether or not to render a "Download Original" button to download via base64 inline onclick JavaScript (defaults to `true`)
136137

137138

138139
## License

index.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const previewEmail = async (message, options) => {
3838
returnHTML: false,
3939
// <https://nodemailer.com/extras/mailparser/#options>
4040
simpleParser: {},
41+
hasDownloadOriginalButton: true,
4142
...options
4243
};
4344

@@ -47,20 +48,22 @@ const previewEmail = async (message, options) => {
4748
let base64;
4849
if (Buffer.isBuffer(message)) {
4950
raw = message;
50-
base64 = message.toString('base64');
51+
if (options.hasDownloadOriginalButton) base64 = message.toString('base64');
5152
} else if (typeof message === 'string') {
5253
raw = message;
53-
base64 = Buffer.from(message).toString('base64');
54+
if (options.hasDownloadOriginalButton)
55+
base64 = Buffer.from(message).toString('base64');
5456
} else if (typeof message === 'object') {
5557
const response = await transport.sendMail(message);
5658
raw = response.message;
57-
base64 = Buffer.from(response.message).toString('base64');
59+
if (options.hasDownloadOriginalButton)
60+
base64 = Buffer.from(response.message).toString('base64');
5861
} else {
5962
throw new TypeError('Message argument is required');
6063
}
6164

6265
const parsed = await simpleParser(raw, options.simpleParser);
63-
parsed.base64 = base64;
66+
if (options.hasDownloadOriginalButton) parsed.base64 = base64;
6467

6568
const html = await renderFilePromise(
6669
options.template,

template.pug

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ html
113113
input(type='radio', name='preview_email', checked)#tab-html
114114
label(for='tab-html') HTML
115115
.preview-email-tab
116-
iframe(sandbox, referrerpolicy='no-referrer', seamless='seamless', srcdoc=`<base target='_top'>${html}`)#html
116+
iframe(sandbox='', referrerpolicy='no-referrer', seamless='seamless', srcdoc=`<base target='_top'>${html}`)#html
117117
if text
118118
input(type='radio', name='preview_email', checked=!html)#tab-text
119119
label(for='tab-text') Plain text
120120
.preview-email-tab
121-
iframe(sandbox, referrerpolicy='no-referrer', seamless='seamless', srcdoc=`<pre>${text}</pre>`)#text
121+
iframe(sandbox='', referrerpolicy='no-referrer', seamless='seamless', srcdoc=`<pre>${text}</pre>`)#text

0 commit comments

Comments
 (0)