m06_task3.js 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. package/.idea/.name +1 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +10 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/node_lab_6.iml +12 -0
  6. package/06_task2.html +73 -0
  7. package/06_task2.js +52 -0
  8. package/06_task3.js +3 -0
  9. package/06_task4.js +3 -0
  10. package/m06_task3.js +28 -0
  11. package/package/index.js +28 -0
  12. package/package/node_modules/.package-lock.json +31 -0
  13. package/package/node_modules/@types/node/LICENSE +21 -0
  14. package/package/node_modules/@types/node/README.md +16 -0
  15. package/package/node_modules/@types/node/assert/strict.d.ts +8 -0
  16. package/package/node_modules/@types/node/assert.d.ts +961 -0
  17. package/package/node_modules/@types/node/async_hooks.d.ts +501 -0
  18. package/package/node_modules/@types/node/buffer.d.ts +2258 -0
  19. package/package/node_modules/@types/node/child_process.d.ts +1369 -0
  20. package/package/node_modules/@types/node/cluster.d.ts +410 -0
  21. package/package/node_modules/@types/node/console.d.ts +412 -0
  22. package/package/node_modules/@types/node/constants.d.ts +18 -0
  23. package/package/node_modules/@types/node/crypto.d.ts +3964 -0
  24. package/package/node_modules/@types/node/dgram.d.ts +545 -0
  25. package/package/node_modules/@types/node/diagnostics_channel.d.ts +153 -0
  26. package/package/node_modules/@types/node/dns/promises.d.ts +370 -0
  27. package/package/node_modules/@types/node/dns.d.ts +659 -0
  28. package/package/node_modules/@types/node/dom-events.d.ts +126 -0
  29. package/package/node_modules/@types/node/domain.d.ts +170 -0
  30. package/package/node_modules/@types/node/events.d.ts +678 -0
  31. package/package/node_modules/@types/node/fs/promises.d.ts +1138 -0
  32. package/package/node_modules/@types/node/fs.d.ts +3872 -0
  33. package/package/node_modules/@types/node/globals.d.ts +300 -0
  34. package/package/node_modules/@types/node/globals.global.d.ts +1 -0
  35. package/package/node_modules/@types/node/http.d.ts +1614 -0
  36. package/package/node_modules/@types/node/http2.d.ts +2134 -0
  37. package/package/node_modules/@types/node/https.d.ts +541 -0
  38. package/package/node_modules/@types/node/index.d.ts +133 -0
  39. package/package/node_modules/@types/node/inspector.d.ts +2741 -0
  40. package/package/node_modules/@types/node/module.d.ts +114 -0
  41. package/package/node_modules/@types/node/net.d.ts +869 -0
  42. package/package/node_modules/@types/node/os.d.ts +466 -0
  43. package/package/node_modules/@types/node/package.json +232 -0
  44. package/package/node_modules/@types/node/path.d.ts +191 -0
  45. package/package/node_modules/@types/node/perf_hooks.d.ts +625 -0
  46. package/package/node_modules/@types/node/process.d.ts +1482 -0
  47. package/package/node_modules/@types/node/punycode.d.ts +117 -0
  48. package/package/node_modules/@types/node/querystring.d.ts +131 -0
  49. package/package/node_modules/@types/node/readline/promises.d.ts +143 -0
  50. package/package/node_modules/@types/node/readline.d.ts +653 -0
  51. package/package/node_modules/@types/node/repl.d.ts +424 -0
  52. package/package/node_modules/@types/node/stream/consumers.d.ts +12 -0
  53. package/package/node_modules/@types/node/stream/promises.d.ts +42 -0
  54. package/package/node_modules/@types/node/stream/web.d.ts +330 -0
  55. package/package/node_modules/@types/node/stream.d.ts +1340 -0
  56. package/package/node_modules/@types/node/string_decoder.d.ts +67 -0
  57. package/package/node_modules/@types/node/test.d.ts +314 -0
  58. package/package/node_modules/@types/node/timers/promises.d.ts +68 -0
  59. package/package/node_modules/@types/node/timers.d.ts +94 -0
  60. package/package/node_modules/@types/node/tls.d.ts +1028 -0
  61. package/package/node_modules/@types/node/trace_events.d.ts +171 -0
  62. package/package/node_modules/@types/node/ts4.8/assert/strict.d.ts +8 -0
  63. package/package/node_modules/@types/node/ts4.8/assert.d.ts +961 -0
  64. package/package/node_modules/@types/node/ts4.8/async_hooks.d.ts +501 -0
  65. package/package/node_modules/@types/node/ts4.8/buffer.d.ts +2259 -0
  66. package/package/node_modules/@types/node/ts4.8/child_process.d.ts +1369 -0
  67. package/package/node_modules/@types/node/ts4.8/cluster.d.ts +410 -0
  68. package/package/node_modules/@types/node/ts4.8/console.d.ts +412 -0
  69. package/package/node_modules/@types/node/ts4.8/constants.d.ts +18 -0
  70. package/package/node_modules/@types/node/ts4.8/crypto.d.ts +3964 -0
  71. package/package/node_modules/@types/node/ts4.8/dgram.d.ts +545 -0
  72. package/package/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts +153 -0
  73. package/package/node_modules/@types/node/ts4.8/dns/promises.d.ts +370 -0
  74. package/package/node_modules/@types/node/ts4.8/dns.d.ts +659 -0
  75. package/package/node_modules/@types/node/ts4.8/dom-events.d.ts +126 -0
  76. package/package/node_modules/@types/node/ts4.8/domain.d.ts +170 -0
  77. package/package/node_modules/@types/node/ts4.8/events.d.ts +678 -0
  78. package/package/node_modules/@types/node/ts4.8/fs/promises.d.ts +1138 -0
  79. package/package/node_modules/@types/node/ts4.8/fs.d.ts +3872 -0
  80. package/package/node_modules/@types/node/ts4.8/globals.d.ts +294 -0
  81. package/package/node_modules/@types/node/ts4.8/globals.global.d.ts +1 -0
  82. package/package/node_modules/@types/node/ts4.8/http.d.ts +1614 -0
  83. package/package/node_modules/@types/node/ts4.8/http2.d.ts +2134 -0
  84. package/package/node_modules/@types/node/ts4.8/https.d.ts +541 -0
  85. package/package/node_modules/@types/node/ts4.8/index.d.ts +88 -0
  86. package/package/node_modules/@types/node/ts4.8/inspector.d.ts +2741 -0
  87. package/package/node_modules/@types/node/ts4.8/module.d.ts +114 -0
  88. package/package/node_modules/@types/node/ts4.8/net.d.ts +869 -0
  89. package/package/node_modules/@types/node/ts4.8/os.d.ts +466 -0
  90. package/package/node_modules/@types/node/ts4.8/path.d.ts +191 -0
  91. package/package/node_modules/@types/node/ts4.8/perf_hooks.d.ts +625 -0
  92. package/package/node_modules/@types/node/ts4.8/process.d.ts +1482 -0
  93. package/package/node_modules/@types/node/ts4.8/punycode.d.ts +117 -0
  94. package/package/node_modules/@types/node/ts4.8/querystring.d.ts +131 -0
  95. package/package/node_modules/@types/node/ts4.8/readline/promises.d.ts +143 -0
  96. package/package/node_modules/@types/node/ts4.8/readline.d.ts +653 -0
  97. package/package/node_modules/@types/node/ts4.8/repl.d.ts +424 -0
  98. package/package/node_modules/@types/node/ts4.8/stream/consumers.d.ts +12 -0
  99. package/package/node_modules/@types/node/ts4.8/stream/promises.d.ts +42 -0
  100. package/package/node_modules/@types/node/ts4.8/stream/web.d.ts +330 -0
  101. package/package/node_modules/@types/node/ts4.8/stream.d.ts +1340 -0
  102. package/package/node_modules/@types/node/ts4.8/string_decoder.d.ts +67 -0
  103. package/package/node_modules/@types/node/ts4.8/test.d.ts +314 -0
  104. package/package/node_modules/@types/node/ts4.8/timers/promises.d.ts +68 -0
  105. package/package/node_modules/@types/node/ts4.8/timers.d.ts +94 -0
  106. package/package/node_modules/@types/node/ts4.8/tls.d.ts +1028 -0
  107. package/package/node_modules/@types/node/ts4.8/trace_events.d.ts +171 -0
  108. package/package/node_modules/@types/node/ts4.8/tty.d.ts +206 -0
  109. package/package/node_modules/@types/node/ts4.8/url.d.ts +897 -0
  110. package/package/node_modules/@types/node/ts4.8/util.d.ts +1850 -0
  111. package/package/node_modules/@types/node/ts4.8/v8.d.ts +396 -0
  112. package/package/node_modules/@types/node/ts4.8/vm.d.ts +509 -0
  113. package/package/node_modules/@types/node/ts4.8/wasi.d.ts +158 -0
  114. package/package/node_modules/@types/node/ts4.8/worker_threads.d.ts +689 -0
  115. package/package/node_modules/@types/node/ts4.8/zlib.d.ts +517 -0
  116. package/package/node_modules/@types/node/tty.d.ts +206 -0
  117. package/package/node_modules/@types/node/url.d.ts +897 -0
  118. package/package/node_modules/@types/node/util.d.ts +1850 -0
  119. package/package/node_modules/@types/node/v8.d.ts +396 -0
  120. package/package/node_modules/@types/node/vm.d.ts +509 -0
  121. package/package/node_modules/@types/node/wasi.d.ts +158 -0
  122. package/package/node_modules/@types/node/worker_threads.d.ts +689 -0
  123. package/package/node_modules/@types/node/zlib.d.ts +517 -0
  124. package/package/node_modules/@types/nodemailer/LICENSE +21 -0
  125. package/package/node_modules/@types/nodemailer/README.md +16 -0
  126. package/package/node_modules/@types/nodemailer/index.d.ts +83 -0
  127. package/package/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  128. package/package/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  129. package/package/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  130. package/package/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  131. package/package/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  132. package/package/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +11 -0
  133. package/package/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  134. package/package/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  135. package/package/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +50 -0
  136. package/package/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  137. package/package/node_modules/@types/nodemailer/lib/mailer/index.d.ts +230 -0
  138. package/package/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +28 -0
  139. package/package/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  140. package/package/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  141. package/package/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +137 -0
  142. package/package/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  143. package/package/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  144. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  145. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  146. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  147. package/package/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +136 -0
  148. package/package/node_modules/@types/nodemailer/lib/shared/index.d.ts +51 -0
  149. package/package/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  150. package/package/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +11 -0
  151. package/package/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +254 -0
  152. package/package/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +90 -0
  153. package/package/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  154. package/package/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  155. package/package/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +56 -0
  156. package/package/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  157. package/package/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +110 -0
  158. package/package/node_modules/@types/nodemailer/package.json +37 -0
  159. package/package/node_modules/nodemailer/.gitattributes +6 -0
  160. package/package/node_modules/nodemailer/.prettierrc.js +8 -0
  161. package/package/node_modules/nodemailer/CHANGELOG.md +715 -0
  162. package/package/node_modules/nodemailer/CODE_OF_CONDUCT.md +76 -0
  163. package/package/node_modules/nodemailer/CONTRIBUTING.md +67 -0
  164. package/package/node_modules/nodemailer/LICENSE +16 -0
  165. package/package/node_modules/nodemailer/README.md +93 -0
  166. package/package/node_modules/nodemailer/SECURITY.txt +22 -0
  167. package/package/node_modules/nodemailer/lib/addressparser/index.js +313 -0
  168. package/package/node_modules/nodemailer/lib/base64/index.js +142 -0
  169. package/package/node_modules/nodemailer/lib/dkim/index.js +251 -0
  170. package/package/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  171. package/package/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  172. package/package/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  173. package/package/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  174. package/package/node_modules/nodemailer/lib/fetch/index.js +269 -0
  175. package/package/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  176. package/package/node_modules/nodemailer/lib/mail-composer/index.js +558 -0
  177. package/package/node_modules/nodemailer/lib/mailer/index.js +427 -0
  178. package/package/node_modules/nodemailer/lib/mailer/mail-message.js +315 -0
  179. package/package/node_modules/nodemailer/lib/mime-funcs/index.js +619 -0
  180. package/package/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2102 -0
  181. package/package/node_modules/nodemailer/lib/mime-node/index.js +1290 -0
  182. package/package/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  183. package/package/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  184. package/package/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  185. package/package/node_modules/nodemailer/lib/nodemailer.js +143 -0
  186. package/package/node_modules/nodemailer/lib/qp/index.js +219 -0
  187. package/package/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  188. package/package/node_modules/nodemailer/lib/ses-transport/index.js +349 -0
  189. package/package/node_modules/nodemailer/lib/shared/index.js +639 -0
  190. package/package/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  191. package/package/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  192. package/package/node_modules/nodemailer/lib/smtp-connection/index.js +1786 -0
  193. package/package/node_modules/nodemailer/lib/smtp-pool/index.js +648 -0
  194. package/package/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +253 -0
  195. package/package/node_modules/nodemailer/lib/smtp-transport/index.js +416 -0
  196. package/package/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  197. package/package/node_modules/nodemailer/lib/well-known/index.js +47 -0
  198. package/package/node_modules/nodemailer/lib/well-known/services.json +286 -0
  199. package/package/node_modules/nodemailer/lib/xoauth2/index.js +376 -0
  200. package/package/node_modules/nodemailer/package.json +46 -0
  201. package/package/node_modules/nodemailer/postinstall.js +101 -0
  202. package/package/package-lock.json +60 -0
  203. package/package/package.json +6 -0
  204. package/package.json +19 -0
@@ -0,0 +1,315 @@
1
+ 'use strict';
2
+
3
+ const shared = require('../shared');
4
+ const MimeNode = require('../mime-node');
5
+ const mimeFuncs = require('../mime-funcs');
6
+
7
+ class MailMessage {
8
+ constructor(mailer, data) {
9
+ this.mailer = mailer;
10
+ this.data = {};
11
+ this.message = null;
12
+
13
+ data = data || {};
14
+ let options = mailer.options || {};
15
+ let defaults = mailer._defaults || {};
16
+
17
+ Object.keys(data).forEach(key => {
18
+ this.data[key] = data[key];
19
+ });
20
+
21
+ this.data.headers = this.data.headers || {};
22
+
23
+ // apply defaults
24
+ Object.keys(defaults).forEach(key => {
25
+ if (!(key in this.data)) {
26
+ this.data[key] = defaults[key];
27
+ } else if (key === 'headers') {
28
+ // headers is a special case. Allow setting individual default headers
29
+ Object.keys(defaults.headers).forEach(key => {
30
+ if (!(key in this.data.headers)) {
31
+ this.data.headers[key] = defaults.headers[key];
32
+ }
33
+ });
34
+ }
35
+ });
36
+
37
+ // force specific keys from transporter options
38
+ ['disableFileAccess', 'disableUrlAccess', 'normalizeHeaderKey'].forEach(key => {
39
+ if (key in options) {
40
+ this.data[key] = options[key];
41
+ }
42
+ });
43
+ }
44
+
45
+ resolveContent(...args) {
46
+ return shared.resolveContent(...args);
47
+ }
48
+
49
+ resolveAll(callback) {
50
+ let keys = [
51
+ [this.data, 'html'],
52
+ [this.data, 'text'],
53
+ [this.data, 'watchHtml'],
54
+ [this.data, 'amp'],
55
+ [this.data, 'icalEvent']
56
+ ];
57
+
58
+ if (this.data.alternatives && this.data.alternatives.length) {
59
+ this.data.alternatives.forEach((alternative, i) => {
60
+ keys.push([this.data.alternatives, i]);
61
+ });
62
+ }
63
+
64
+ if (this.data.attachments && this.data.attachments.length) {
65
+ this.data.attachments.forEach((attachment, i) => {
66
+ if (!attachment.filename) {
67
+ attachment.filename = (attachment.path || attachment.href || '').split('/').pop().split('?').shift() || 'attachment-' + (i + 1);
68
+ if (attachment.filename.indexOf('.') < 0) {
69
+ attachment.filename += '.' + mimeFuncs.detectExtension(attachment.contentType);
70
+ }
71
+ }
72
+
73
+ if (!attachment.contentType) {
74
+ attachment.contentType = mimeFuncs.detectMimeType(attachment.filename || attachment.path || attachment.href || 'bin');
75
+ }
76
+
77
+ keys.push([this.data.attachments, i]);
78
+ });
79
+ }
80
+
81
+ let mimeNode = new MimeNode();
82
+
83
+ let addressKeys = ['from', 'to', 'cc', 'bcc', 'sender', 'replyTo'];
84
+
85
+ addressKeys.forEach(address => {
86
+ let value;
87
+ if (this.message) {
88
+ value = [].concat(mimeNode._parseAddresses(this.message.getHeader(address === 'replyTo' ? 'reply-to' : address)) || []);
89
+ } else if (this.data[address]) {
90
+ value = [].concat(mimeNode._parseAddresses(this.data[address]) || []);
91
+ }
92
+ if (value && value.length) {
93
+ this.data[address] = value;
94
+ } else if (address in this.data) {
95
+ this.data[address] = null;
96
+ }
97
+ });
98
+
99
+ let singleKeys = ['from', 'sender'];
100
+ singleKeys.forEach(address => {
101
+ if (this.data[address]) {
102
+ this.data[address] = this.data[address].shift();
103
+ }
104
+ });
105
+
106
+ let pos = 0;
107
+ let resolveNext = () => {
108
+ if (pos >= keys.length) {
109
+ return callback(null, this.data);
110
+ }
111
+ let args = keys[pos++];
112
+ if (!args[0] || !args[0][args[1]]) {
113
+ return resolveNext();
114
+ }
115
+ shared.resolveContent(...args, (err, value) => {
116
+ if (err) {
117
+ return callback(err);
118
+ }
119
+
120
+ let node = {
121
+ content: value
122
+ };
123
+ if (args[0][args[1]] && typeof args[0][args[1]] === 'object' && !Buffer.isBuffer(args[0][args[1]])) {
124
+ Object.keys(args[0][args[1]]).forEach(key => {
125
+ if (!(key in node) && !['content', 'path', 'href', 'raw'].includes(key)) {
126
+ node[key] = args[0][args[1]][key];
127
+ }
128
+ });
129
+ }
130
+
131
+ args[0][args[1]] = node;
132
+ resolveNext();
133
+ });
134
+ };
135
+
136
+ setImmediate(() => resolveNext());
137
+ }
138
+
139
+ normalize(callback) {
140
+ let envelope = this.data.envelope || this.message.getEnvelope();
141
+ let messageId = this.message.messageId();
142
+
143
+ this.resolveAll((err, data) => {
144
+ if (err) {
145
+ return callback(err);
146
+ }
147
+
148
+ data.envelope = envelope;
149
+ data.messageId = messageId;
150
+
151
+ ['html', 'text', 'watchHtml', 'amp'].forEach(key => {
152
+ if (data[key] && data[key].content) {
153
+ if (typeof data[key].content === 'string') {
154
+ data[key] = data[key].content;
155
+ } else if (Buffer.isBuffer(data[key].content)) {
156
+ data[key] = data[key].content.toString();
157
+ }
158
+ }
159
+ });
160
+
161
+ if (data.icalEvent && Buffer.isBuffer(data.icalEvent.content)) {
162
+ data.icalEvent.content = data.icalEvent.content.toString('base64');
163
+ data.icalEvent.encoding = 'base64';
164
+ }
165
+
166
+ if (data.alternatives && data.alternatives.length) {
167
+ data.alternatives.forEach(alternative => {
168
+ if (alternative && alternative.content && Buffer.isBuffer(alternative.content)) {
169
+ alternative.content = alternative.content.toString('base64');
170
+ alternative.encoding = 'base64';
171
+ }
172
+ });
173
+ }
174
+
175
+ if (data.attachments && data.attachments.length) {
176
+ data.attachments.forEach(attachment => {
177
+ if (attachment && attachment.content && Buffer.isBuffer(attachment.content)) {
178
+ attachment.content = attachment.content.toString('base64');
179
+ attachment.encoding = 'base64';
180
+ }
181
+ });
182
+ }
183
+
184
+ data.normalizedHeaders = {};
185
+ Object.keys(data.headers || {}).forEach(key => {
186
+ let value = [].concat(data.headers[key] || []).shift();
187
+ value = (value && value.value) || value;
188
+ if (value) {
189
+ if (['references', 'in-reply-to', 'message-id', 'content-id'].includes(key)) {
190
+ value = this.message._encodeHeaderValue(key, value);
191
+ }
192
+ data.normalizedHeaders[key] = value;
193
+ }
194
+ });
195
+
196
+ if (data.list && typeof data.list === 'object') {
197
+ let listHeaders = this._getListHeaders(data.list);
198
+ listHeaders.forEach(entry => {
199
+ data.normalizedHeaders[entry.key] = entry.value.map(val => (val && val.value) || val).join(', ');
200
+ });
201
+ }
202
+
203
+ if (data.references) {
204
+ data.normalizedHeaders.references = this.message._encodeHeaderValue('references', data.references);
205
+ }
206
+
207
+ if (data.inReplyTo) {
208
+ data.normalizedHeaders['in-reply-to'] = this.message._encodeHeaderValue('in-reply-to', data.inReplyTo);
209
+ }
210
+
211
+ return callback(null, data);
212
+ });
213
+ }
214
+
215
+ setMailerHeader() {
216
+ if (!this.message || !this.data.xMailer) {
217
+ return;
218
+ }
219
+ this.message.setHeader('X-Mailer', this.data.xMailer);
220
+ }
221
+
222
+ setPriorityHeaders() {
223
+ if (!this.message || !this.data.priority) {
224
+ return;
225
+ }
226
+ switch ((this.data.priority || '').toString().toLowerCase()) {
227
+ case 'high':
228
+ this.message.setHeader('X-Priority', '1 (Highest)');
229
+ this.message.setHeader('X-MSMail-Priority', 'High');
230
+ this.message.setHeader('Importance', 'High');
231
+ break;
232
+ case 'low':
233
+ this.message.setHeader('X-Priority', '5 (Lowest)');
234
+ this.message.setHeader('X-MSMail-Priority', 'Low');
235
+ this.message.setHeader('Importance', 'Low');
236
+ break;
237
+ default:
238
+ // do not add anything, since all messages are 'Normal' by default
239
+ }
240
+ }
241
+
242
+ setListHeaders() {
243
+ if (!this.message || !this.data.list || typeof this.data.list !== 'object') {
244
+ return;
245
+ }
246
+ // add optional List-* headers
247
+ if (this.data.list && typeof this.data.list === 'object') {
248
+ this._getListHeaders(this.data.list).forEach(listHeader => {
249
+ listHeader.value.forEach(value => {
250
+ this.message.addHeader(listHeader.key, value);
251
+ });
252
+ });
253
+ }
254
+ }
255
+
256
+ _getListHeaders(listData) {
257
+ // make sure an url looks like <protocol:url>
258
+ return Object.keys(listData).map(key => ({
259
+ key: 'list-' + key.toLowerCase().trim(),
260
+ value: [].concat(listData[key] || []).map(value => ({
261
+ prepared: true,
262
+ foldLines: true,
263
+ value: []
264
+ .concat(value || [])
265
+ .map(value => {
266
+ if (typeof value === 'string') {
267
+ value = {
268
+ url: value
269
+ };
270
+ }
271
+
272
+ if (value && value.url) {
273
+ if (key.toLowerCase().trim() === 'id') {
274
+ // List-ID: "comment" <domain>
275
+ let comment = value.comment || '';
276
+ if (mimeFuncs.isPlainText(comment)) {
277
+ comment = '"' + comment + '"';
278
+ } else {
279
+ comment = mimeFuncs.encodeWord(comment);
280
+ }
281
+
282
+ return (value.comment ? comment + ' ' : '') + this._formatListUrl(value.url).replace(/^<[^:]+\/{,2}/, '');
283
+ }
284
+
285
+ // List-*: <http://domain> (comment)
286
+ let comment = value.comment || '';
287
+ if (!mimeFuncs.isPlainText(comment)) {
288
+ comment = mimeFuncs.encodeWord(comment);
289
+ }
290
+
291
+ return this._formatListUrl(value.url) + (value.comment ? ' (' + comment + ')' : '');
292
+ }
293
+
294
+ return '';
295
+ })
296
+ .filter(value => value)
297
+ .join(', ')
298
+ }))
299
+ }));
300
+ }
301
+
302
+ _formatListUrl(url) {
303
+ url = url.replace(/[\s<]+|[\s>]+/g, '');
304
+ if (/^(https?|mailto|ftp):/.test(url)) {
305
+ return '<' + url + '>';
306
+ }
307
+ if (/^[^@]+@[^@]+$/.test(url)) {
308
+ return '<mailto:' + url + '>';
309
+ }
310
+
311
+ return '<http://' + url + '>';
312
+ }
313
+ }
314
+
315
+ module.exports = MailMessage;