@bobfrankston/mailx 1.0.465 → 1.0.500

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.
Files changed (344) hide show
  1. package/.globalize.json5 +25 -0
  2. package/README.md +17 -420
  3. package/bin/mailx.js +87 -84
  4. package/bin/mailx.js.map +1 -1
  5. package/bin/mailx.ts +87 -84
  6. package/client/android.html +5 -5
  7. package/client/app.js +42 -38
  8. package/client/components/folder-tree.js +7 -5
  9. package/client/components/message-list.js +485 -448
  10. package/client/components/message-viewer.js +36 -41
  11. package/client/index.html +8 -8
  12. package/client/lib/message-state.js +46 -65
  13. package/index.js +59 -0
  14. package/package.json +12 -114
  15. package/packages/mailx-send/mailsend/{package-lock.json → node_modules/.package-lock.json} +0 -16
  16. package/packages/mailx-send/mailsend/node_modules/@types/node/LICENSE +21 -0
  17. package/packages/mailx-send/mailsend/node_modules/@types/node/README.md +15 -0
  18. package/packages/mailx-send/mailsend/node_modules/@types/node/assert/strict.d.ts +111 -0
  19. package/packages/mailx-send/mailsend/node_modules/@types/node/assert.d.ts +1078 -0
  20. package/packages/mailx-send/mailsend/node_modules/@types/node/async_hooks.d.ts +603 -0
  21. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  22. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.d.ts +1934 -0
  23. package/packages/mailx-send/mailsend/node_modules/@types/node/child_process.d.ts +1476 -0
  24. package/packages/mailx-send/mailsend/node_modules/@types/node/cluster.d.ts +578 -0
  25. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  26. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/index.d.ts +9 -0
  27. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  28. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  29. package/packages/mailx-send/mailsend/node_modules/@types/node/console.d.ts +452 -0
  30. package/packages/mailx-send/mailsend/node_modules/@types/node/constants.d.ts +21 -0
  31. package/packages/mailx-send/mailsend/node_modules/@types/node/crypto.d.ts +4545 -0
  32. package/packages/mailx-send/mailsend/node_modules/@types/node/dgram.d.ts +600 -0
  33. package/packages/mailx-send/mailsend/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  34. package/packages/mailx-send/mailsend/node_modules/@types/node/dns/promises.d.ts +503 -0
  35. package/packages/mailx-send/mailsend/node_modules/@types/node/dns.d.ts +923 -0
  36. package/packages/mailx-send/mailsend/node_modules/@types/node/domain.d.ts +170 -0
  37. package/packages/mailx-send/mailsend/node_modules/@types/node/events.d.ts +976 -0
  38. package/packages/mailx-send/mailsend/node_modules/@types/node/fs/promises.d.ts +1295 -0
  39. package/packages/mailx-send/mailsend/node_modules/@types/node/fs.d.ts +4461 -0
  40. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.d.ts +172 -0
  41. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  42. package/packages/mailx-send/mailsend/node_modules/@types/node/http.d.ts +2089 -0
  43. package/packages/mailx-send/mailsend/node_modules/@types/node/http2.d.ts +2644 -0
  44. package/packages/mailx-send/mailsend/node_modules/@types/node/https.d.ts +579 -0
  45. package/packages/mailx-send/mailsend/node_modules/@types/node/index.d.ts +97 -0
  46. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.d.ts +253 -0
  47. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  48. package/packages/mailx-send/mailsend/node_modules/@types/node/module.d.ts +891 -0
  49. package/packages/mailx-send/mailsend/node_modules/@types/node/net.d.ts +1057 -0
  50. package/packages/mailx-send/mailsend/node_modules/@types/node/os.d.ts +506 -0
  51. package/packages/mailx-send/mailsend/node_modules/@types/node/package.json +145 -0
  52. package/packages/mailx-send/mailsend/node_modules/@types/node/path.d.ts +200 -0
  53. package/packages/mailx-send/mailsend/node_modules/@types/node/perf_hooks.d.ts +968 -0
  54. package/packages/mailx-send/mailsend/node_modules/@types/node/process.d.ts +2084 -0
  55. package/packages/mailx-send/mailsend/node_modules/@types/node/punycode.d.ts +117 -0
  56. package/packages/mailx-send/mailsend/node_modules/@types/node/querystring.d.ts +152 -0
  57. package/packages/mailx-send/mailsend/node_modules/@types/node/readline/promises.d.ts +161 -0
  58. package/packages/mailx-send/mailsend/node_modules/@types/node/readline.d.ts +594 -0
  59. package/packages/mailx-send/mailsend/node_modules/@types/node/repl.d.ts +428 -0
  60. package/packages/mailx-send/mailsend/node_modules/@types/node/sea.d.ts +153 -0
  61. package/packages/mailx-send/mailsend/node_modules/@types/node/sqlite.d.ts +721 -0
  62. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/consumers.d.ts +38 -0
  63. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/promises.d.ts +90 -0
  64. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/web.d.ts +622 -0
  65. package/packages/mailx-send/mailsend/node_modules/@types/node/stream.d.ts +1664 -0
  66. package/packages/mailx-send/mailsend/node_modules/@types/node/string_decoder.d.ts +67 -0
  67. package/packages/mailx-send/mailsend/node_modules/@types/node/test.d.ts +2163 -0
  68. package/packages/mailx-send/mailsend/node_modules/@types/node/timers/promises.d.ts +108 -0
  69. package/packages/mailx-send/mailsend/node_modules/@types/node/timers.d.ts +287 -0
  70. package/packages/mailx-send/mailsend/node_modules/@types/node/tls.d.ts +1319 -0
  71. package/packages/mailx-send/mailsend/node_modules/@types/node/trace_events.d.ts +197 -0
  72. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  73. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  74. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  75. package/packages/mailx-send/mailsend/node_modules/@types/node/tty.d.ts +208 -0
  76. package/packages/mailx-send/mailsend/node_modules/@types/node/url.d.ts +984 -0
  77. package/packages/mailx-send/mailsend/node_modules/@types/node/util.d.ts +2606 -0
  78. package/packages/mailx-send/mailsend/node_modules/@types/node/v8.d.ts +920 -0
  79. package/packages/mailx-send/mailsend/node_modules/@types/node/vm.d.ts +1000 -0
  80. package/packages/mailx-send/mailsend/node_modules/@types/node/wasi.d.ts +181 -0
  81. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  82. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  83. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/events.d.ts +97 -0
  84. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  85. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  86. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  87. package/packages/mailx-send/mailsend/node_modules/@types/node/worker_threads.d.ts +784 -0
  88. package/packages/mailx-send/mailsend/node_modules/@types/node/zlib.d.ts +747 -0
  89. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/LICENSE +21 -0
  90. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/README.md +15 -0
  91. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/index.d.ts +82 -0
  92. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  93. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  94. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  95. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  96. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  97. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +21 -0
  98. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  99. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  100. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +53 -0
  101. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  102. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/index.d.ts +283 -0
  103. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +32 -0
  104. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  105. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  106. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +224 -0
  107. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  108. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  109. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  110. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  111. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  112. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +146 -0
  113. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/shared/index.d.ts +58 -0
  114. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  115. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +16 -0
  116. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +270 -0
  117. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +93 -0
  118. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  119. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  120. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +59 -0
  121. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  122. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +114 -0
  123. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/package.json +38 -0
  124. package/packages/mailx-send/mailsend/node_modules/nodemailer/.ncurc.js +9 -0
  125. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierignore +8 -0
  126. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc +12 -0
  127. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc.js +10 -0
  128. package/packages/mailx-send/mailsend/node_modules/nodemailer/.release-please-config.json +9 -0
  129. package/packages/mailx-send/mailsend/node_modules/nodemailer/LICENSE +16 -0
  130. package/packages/mailx-send/mailsend/node_modules/nodemailer/README.md +86 -0
  131. package/packages/mailx-send/mailsend/node_modules/nodemailer/SECURITY.txt +22 -0
  132. package/packages/mailx-send/mailsend/node_modules/nodemailer/eslint.config.js +88 -0
  133. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  134. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/base64/index.js +139 -0
  135. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/index.js +253 -0
  136. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  137. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  138. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  139. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  140. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/index.js +280 -0
  141. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  142. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  143. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/index.js +441 -0
  144. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  145. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  146. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  147. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  148. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  149. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  150. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  151. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/nodemailer.js +157 -0
  152. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/punycode/index.js +460 -0
  153. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/qp/index.js +227 -0
  154. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  155. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  156. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/shared/index.js +754 -0
  157. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  158. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  159. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  160. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  161. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  162. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  163. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  164. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/index.js +47 -0
  165. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/services.json +611 -0
  166. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  167. package/packages/mailx-send/mailsend/node_modules/nodemailer/package.json +47 -0
  168. package/packages/mailx-send/mailsend/node_modules/undici-types/LICENSE +21 -0
  169. package/packages/mailx-send/mailsend/node_modules/undici-types/README.md +6 -0
  170. package/packages/mailx-send/mailsend/node_modules/undici-types/agent.d.ts +31 -0
  171. package/packages/mailx-send/mailsend/node_modules/undici-types/api.d.ts +43 -0
  172. package/packages/mailx-send/mailsend/node_modules/undici-types/balanced-pool.d.ts +29 -0
  173. package/packages/mailx-send/mailsend/node_modules/undici-types/cache.d.ts +36 -0
  174. package/packages/mailx-send/mailsend/node_modules/undici-types/client.d.ts +108 -0
  175. package/packages/mailx-send/mailsend/node_modules/undici-types/connector.d.ts +34 -0
  176. package/packages/mailx-send/mailsend/node_modules/undici-types/content-type.d.ts +21 -0
  177. package/packages/mailx-send/mailsend/node_modules/undici-types/cookies.d.ts +28 -0
  178. package/packages/mailx-send/mailsend/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  179. package/packages/mailx-send/mailsend/node_modules/undici-types/dispatcher.d.ts +256 -0
  180. package/packages/mailx-send/mailsend/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  181. package/packages/mailx-send/mailsend/node_modules/undici-types/errors.d.ts +149 -0
  182. package/packages/mailx-send/mailsend/node_modules/undici-types/eventsource.d.ts +61 -0
  183. package/packages/mailx-send/mailsend/node_modules/undici-types/fetch.d.ts +209 -0
  184. package/packages/mailx-send/mailsend/node_modules/undici-types/file.d.ts +39 -0
  185. package/packages/mailx-send/mailsend/node_modules/undici-types/filereader.d.ts +54 -0
  186. package/packages/mailx-send/mailsend/node_modules/undici-types/formdata.d.ts +108 -0
  187. package/packages/mailx-send/mailsend/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  188. package/packages/mailx-send/mailsend/node_modules/undici-types/global-origin.d.ts +7 -0
  189. package/packages/mailx-send/mailsend/node_modules/undici-types/handlers.d.ts +15 -0
  190. package/packages/mailx-send/mailsend/node_modules/undici-types/header.d.ts +4 -0
  191. package/packages/mailx-send/mailsend/node_modules/undici-types/index.d.ts +71 -0
  192. package/packages/mailx-send/mailsend/node_modules/undici-types/interceptors.d.ts +17 -0
  193. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-agent.d.ts +50 -0
  194. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-client.d.ts +25 -0
  195. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-errors.d.ts +12 -0
  196. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  197. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-pool.d.ts +25 -0
  198. package/packages/mailx-send/mailsend/node_modules/undici-types/package.json +55 -0
  199. package/packages/mailx-send/mailsend/node_modules/undici-types/patch.d.ts +33 -0
  200. package/packages/mailx-send/mailsend/node_modules/undici-types/pool-stats.d.ts +19 -0
  201. package/packages/mailx-send/mailsend/node_modules/undici-types/pool.d.ts +39 -0
  202. package/packages/mailx-send/mailsend/node_modules/undici-types/proxy-agent.d.ts +28 -0
  203. package/packages/mailx-send/mailsend/node_modules/undici-types/readable.d.ts +65 -0
  204. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-agent.d.ts +8 -0
  205. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-handler.d.ts +116 -0
  206. package/packages/mailx-send/mailsend/node_modules/undici-types/util.d.ts +18 -0
  207. package/packages/mailx-send/mailsend/node_modules/undici-types/webidl.d.ts +228 -0
  208. package/packages/mailx-send/mailsend/node_modules/undici-types/websocket.d.ts +150 -0
  209. package/packages/mailx-server/index.js +1 -1
  210. package/packages/mailx-settings/cloud.js +12 -7
  211. package/packages/mailx-settings/index.js +22 -1
  212. package/client/.gitattributes +0 -10
  213. package/client/app.js.map +0 -1
  214. package/client/app.ts +0 -3190
  215. package/client/components/address-book.js.map +0 -1
  216. package/client/components/address-book.ts +0 -204
  217. package/client/components/alarms.js.map +0 -1
  218. package/client/components/alarms.ts +0 -276
  219. package/client/components/calendar-sidebar.js.map +0 -1
  220. package/client/components/calendar-sidebar.ts +0 -474
  221. package/client/components/calendar.js.map +0 -1
  222. package/client/components/calendar.ts +0 -211
  223. package/client/components/context-menu.js.map +0 -1
  224. package/client/components/context-menu.ts +0 -95
  225. package/client/components/folder-picker.js.map +0 -1
  226. package/client/components/folder-picker.ts +0 -127
  227. package/client/components/folder-tree.js.map +0 -1
  228. package/client/components/folder-tree.ts +0 -1069
  229. package/client/components/message-list.js.map +0 -1
  230. package/client/components/message-list.ts +0 -1129
  231. package/client/components/message-viewer.js.map +0 -1
  232. package/client/components/message-viewer.ts +0 -1257
  233. package/client/components/outbox-view.js.map +0 -1
  234. package/client/components/outbox-view.ts +0 -102
  235. package/client/components/tasks.js.map +0 -1
  236. package/client/components/tasks.ts +0 -234
  237. package/client/compose/compose.js.map +0 -1
  238. package/client/compose/compose.ts +0 -1231
  239. package/client/compose/editor.js.map +0 -1
  240. package/client/compose/editor.ts +0 -599
  241. package/client/compose/ghost-text.js.map +0 -1
  242. package/client/compose/ghost-text.ts +0 -140
  243. package/client/lib/android-bootstrap.js.map +0 -1
  244. package/client/lib/android-bootstrap.ts +0 -9
  245. package/client/lib/api-client.js.map +0 -1
  246. package/client/lib/api-client.ts +0 -439
  247. package/client/lib/local-service.js.map +0 -1
  248. package/client/lib/local-service.ts +0 -646
  249. package/client/lib/local-store.js.map +0 -1
  250. package/client/lib/local-store.ts +0 -283
  251. package/client/lib/message-state.js.map +0 -1
  252. package/client/lib/message-state.ts +0 -160
  253. package/client/tsconfig.json +0 -19
  254. package/packages/mailx-api/.gitattributes +0 -10
  255. package/packages/mailx-api/index.d.ts.map +0 -1
  256. package/packages/mailx-api/index.js.map +0 -1
  257. package/packages/mailx-api/index.ts +0 -283
  258. package/packages/mailx-api/tsconfig.json +0 -9
  259. package/packages/mailx-compose/.gitattributes +0 -10
  260. package/packages/mailx-compose/index.d.ts.map +0 -1
  261. package/packages/mailx-compose/index.js.map +0 -1
  262. package/packages/mailx-compose/index.ts +0 -85
  263. package/packages/mailx-compose/tsconfig.json +0 -9
  264. package/packages/mailx-host/.gitattributes +0 -10
  265. package/packages/mailx-host/index.d.ts +0 -21
  266. package/packages/mailx-host/index.d.ts.map +0 -1
  267. package/packages/mailx-host/index.js +0 -29
  268. package/packages/mailx-host/index.js.map +0 -1
  269. package/packages/mailx-host/index.ts +0 -38
  270. package/packages/mailx-host/package.json +0 -23
  271. package/packages/mailx-host/tsconfig.json +0 -9
  272. package/packages/mailx-host/types-shim.d.ts +0 -14
  273. package/packages/mailx-imap/.gitattributes +0 -10
  274. package/packages/mailx-imap/index.d.ts +0 -442
  275. package/packages/mailx-imap/index.d.ts.map +0 -1
  276. package/packages/mailx-imap/index.js +0 -3684
  277. package/packages/mailx-imap/index.js.map +0 -1
  278. package/packages/mailx-imap/index.ts +0 -3652
  279. package/packages/mailx-imap/package-lock.json +0 -131
  280. package/packages/mailx-imap/package.json +0 -28
  281. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  282. package/packages/mailx-imap/providers/gmail-api.d.ts.map +0 -1
  283. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  284. package/packages/mailx-imap/providers/gmail-api.js.map +0 -1
  285. package/packages/mailx-imap/providers/gmail-api.ts +0 -8
  286. package/packages/mailx-imap/providers/outlook-api.ts +0 -7
  287. package/packages/mailx-imap/providers/types.d.ts +0 -9
  288. package/packages/mailx-imap/providers/types.d.ts.map +0 -1
  289. package/packages/mailx-imap/providers/types.js +0 -9
  290. package/packages/mailx-imap/providers/types.js.map +0 -1
  291. package/packages/mailx-imap/providers/types.ts +0 -9
  292. package/packages/mailx-imap/tsconfig.json +0 -9
  293. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  294. package/packages/mailx-send/.gitattributes +0 -10
  295. package/packages/mailx-send/cli-queue.d.ts.map +0 -1
  296. package/packages/mailx-send/cli-queue.js.map +0 -1
  297. package/packages/mailx-send/cli-queue.ts +0 -62
  298. package/packages/mailx-send/cli-send.d.ts.map +0 -1
  299. package/packages/mailx-send/cli-send.js.map +0 -1
  300. package/packages/mailx-send/cli-send.ts +0 -83
  301. package/packages/mailx-send/cli.d.ts.map +0 -1
  302. package/packages/mailx-send/cli.js.map +0 -1
  303. package/packages/mailx-send/cli.ts +0 -126
  304. package/packages/mailx-send/index.d.ts.map +0 -1
  305. package/packages/mailx-send/index.js.map +0 -1
  306. package/packages/mailx-send/index.ts +0 -333
  307. package/packages/mailx-send/mailsend/cli.d.ts.map +0 -1
  308. package/packages/mailx-send/mailsend/cli.js.map +0 -1
  309. package/packages/mailx-send/mailsend/cli.ts +0 -81
  310. package/packages/mailx-send/mailsend/index.d.ts.map +0 -1
  311. package/packages/mailx-send/mailsend/index.js.map +0 -1
  312. package/packages/mailx-send/mailsend/index.ts +0 -333
  313. package/packages/mailx-send/mailsend/tsconfig.json +0 -21
  314. package/packages/mailx-send/package-lock.json +0 -65
  315. package/packages/mailx-send/tsconfig.json +0 -21
  316. package/packages/mailx-server/.gitattributes +0 -10
  317. package/packages/mailx-server/index.d.ts.map +0 -1
  318. package/packages/mailx-server/index.js.map +0 -1
  319. package/packages/mailx-server/index.ts +0 -429
  320. package/packages/mailx-server/tsconfig.json +0 -9
  321. package/packages/mailx-settings/.gitattributes +0 -10
  322. package/packages/mailx-settings/cloud.d.ts.map +0 -1
  323. package/packages/mailx-settings/cloud.js.map +0 -1
  324. package/packages/mailx-settings/cloud.ts +0 -388
  325. package/packages/mailx-settings/index.d.ts.map +0 -1
  326. package/packages/mailx-settings/index.js.map +0 -1
  327. package/packages/mailx-settings/index.ts +0 -892
  328. package/packages/mailx-settings/tsconfig.json +0 -9
  329. package/packages/mailx-store/.gitattributes +0 -10
  330. package/packages/mailx-store/db.d.ts.map +0 -1
  331. package/packages/mailx-store/db.js.map +0 -1
  332. package/packages/mailx-store/db.ts +0 -2007
  333. package/packages/mailx-store/file-store.d.ts.map +0 -1
  334. package/packages/mailx-store/file-store.js.map +0 -1
  335. package/packages/mailx-store/file-store.ts +0 -82
  336. package/packages/mailx-store/index.d.ts.map +0 -1
  337. package/packages/mailx-store/index.js.map +0 -1
  338. package/packages/mailx-store/index.ts +0 -7
  339. package/packages/mailx-store/tsconfig.json +0 -9
  340. package/packages/mailx-types/.gitattributes +0 -10
  341. package/packages/mailx-types/index.d.ts.map +0 -1
  342. package/packages/mailx-types/index.js.map +0 -1
  343. package/packages/mailx-types/index.ts +0 -498
  344. package/packages/mailx-types/tsconfig.json +0 -9
@@ -0,0 +1,259 @@
1
+ 'use strict';
2
+
3
+ const SMTPConnection = require('../smtp-connection');
4
+ const assign = require('../shared').assign;
5
+ const XOAuth2 = require('../xoauth2');
6
+ const EventEmitter = require('events');
7
+
8
+ /**
9
+ * Creates an element for the pool
10
+ *
11
+ * @constructor
12
+ * @param {Object} options SMTPPool instance
13
+ */
14
+ class PoolResource extends EventEmitter {
15
+ constructor(pool) {
16
+ super();
17
+
18
+ this.pool = pool;
19
+ this.options = pool.options;
20
+ this.logger = this.pool.logger;
21
+
22
+ if (this.options.auth) {
23
+ switch ((this.options.auth.type || '').toString().toUpperCase()) {
24
+ case 'OAUTH2': {
25
+ let oauth2 = new XOAuth2(this.options.auth, this.logger);
26
+ oauth2.provisionCallback =
27
+ (this.pool.mailer && this.pool.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
28
+ this.auth = {
29
+ type: 'OAUTH2',
30
+ user: this.options.auth.user,
31
+ oauth2,
32
+ method: 'XOAUTH2'
33
+ };
34
+ oauth2.on('token', token => this.pool.mailer.emit('token', token));
35
+ oauth2.on('error', err => this.emit('error', err));
36
+ break;
37
+ }
38
+ default:
39
+ if (!this.options.auth.user && !this.options.auth.pass) {
40
+ break;
41
+ }
42
+ this.auth = {
43
+ type: (this.options.auth.type || '').toString().toUpperCase() || 'LOGIN',
44
+ user: this.options.auth.user,
45
+ credentials: {
46
+ user: this.options.auth.user || '',
47
+ pass: this.options.auth.pass,
48
+ options: this.options.auth.options
49
+ },
50
+ method: (this.options.auth.method || '').trim().toUpperCase() || this.options.authMethod || false
51
+ };
52
+ }
53
+ }
54
+
55
+ this._connection = false;
56
+ this._connected = false;
57
+
58
+ this.messages = 0;
59
+ this.available = true;
60
+ }
61
+
62
+ /**
63
+ * Initiates a connection to the SMTP server
64
+ *
65
+ * @param {Function} callback Callback function to run once the connection is established or failed
66
+ */
67
+ connect(callback) {
68
+ this.pool.getSocket(this.options, (err, socketOptions) => {
69
+ if (err) {
70
+ return callback(err);
71
+ }
72
+
73
+ let returned = false;
74
+ let options = this.options;
75
+ if (socketOptions && socketOptions.connection) {
76
+ this.logger.info(
77
+ {
78
+ tnx: 'proxy',
79
+ remoteAddress: socketOptions.connection.remoteAddress,
80
+ remotePort: socketOptions.connection.remotePort,
81
+ destHost: options.host || '',
82
+ destPort: options.port || '',
83
+ action: 'connected'
84
+ },
85
+ 'Using proxied socket from %s:%s to %s:%s',
86
+ socketOptions.connection.remoteAddress,
87
+ socketOptions.connection.remotePort,
88
+ options.host || '',
89
+ options.port || ''
90
+ );
91
+
92
+ options = assign(false, options);
93
+ Object.keys(socketOptions).forEach(key => {
94
+ options[key] = socketOptions[key];
95
+ });
96
+ }
97
+
98
+ this.connection = new SMTPConnection(options);
99
+
100
+ this.connection.once('error', err => {
101
+ this.emit('error', err);
102
+ if (returned) {
103
+ return;
104
+ }
105
+ returned = true;
106
+ return callback(err);
107
+ });
108
+
109
+ this.connection.once('end', () => {
110
+ this.close();
111
+ if (returned) {
112
+ return;
113
+ }
114
+ returned = true;
115
+
116
+ let timer = setTimeout(() => {
117
+ if (returned) {
118
+ return;
119
+ }
120
+ // still have not returned, this means we have an unexpected connection close
121
+ let err = new Error('Unexpected socket close');
122
+ if (this.connection && this.connection._socket && this.connection._socket.upgrading) {
123
+ // starttls connection errors
124
+ err.code = 'ETLS';
125
+ }
126
+ callback(err);
127
+ }, 1000);
128
+
129
+ try {
130
+ timer.unref();
131
+ } catch (_E) {
132
+ // Ignore. Happens on envs with non-node timer implementation
133
+ }
134
+ });
135
+
136
+ this.connection.connect(() => {
137
+ if (returned) {
138
+ return;
139
+ }
140
+
141
+ if (this.auth && (this.connection.allowsAuth || options.forceAuth)) {
142
+ this.connection.login(this.auth, err => {
143
+ if (returned) {
144
+ return;
145
+ }
146
+ returned = true;
147
+
148
+ if (err) {
149
+ this.connection.close();
150
+ this.emit('error', err);
151
+ return callback(err);
152
+ }
153
+
154
+ this._connected = true;
155
+ callback(null, true);
156
+ });
157
+ } else {
158
+ returned = true;
159
+ this._connected = true;
160
+ return callback(null, true);
161
+ }
162
+ });
163
+ });
164
+ }
165
+
166
+ /**
167
+ * Sends an e-mail to be sent using the selected settings
168
+ *
169
+ * @param {Object} mail Mail object
170
+ * @param {Function} callback Callback function
171
+ */
172
+ send(mail, callback) {
173
+ if (!this._connected) {
174
+ return this.connect(err => {
175
+ if (err) {
176
+ return callback(err);
177
+ }
178
+ return this.send(mail, callback);
179
+ });
180
+ }
181
+
182
+ let envelope = mail.message.getEnvelope();
183
+ let messageId = mail.message.messageId();
184
+
185
+ let recipients = [].concat(envelope.to || []);
186
+ if (recipients.length > 3) {
187
+ recipients.push('...and ' + recipients.splice(2).length + ' more');
188
+ }
189
+ this.logger.info(
190
+ {
191
+ tnx: 'send',
192
+ messageId,
193
+ cid: this.id
194
+ },
195
+ 'Sending message %s using #%s to <%s>',
196
+ messageId,
197
+ this.id,
198
+ recipients.join(', ')
199
+ );
200
+
201
+ if (mail.data.dsn) {
202
+ envelope.dsn = mail.data.dsn;
203
+ }
204
+
205
+ // RFC 8689: Pass requireTLSExtensionEnabled to envelope for MAIL FROM parameter
206
+ if (mail.data.requireTLSExtensionEnabled) {
207
+ envelope.requireTLSExtensionEnabled = mail.data.requireTLSExtensionEnabled;
208
+ }
209
+
210
+ this.connection.send(envelope, mail.message.createReadStream(), (err, info) => {
211
+ this.messages++;
212
+
213
+ if (err) {
214
+ this.connection.close();
215
+ this.emit('error', err);
216
+ return callback(err);
217
+ }
218
+
219
+ info.envelope = {
220
+ from: envelope.from,
221
+ to: envelope.to
222
+ };
223
+ info.messageId = messageId;
224
+
225
+ setImmediate(() => {
226
+ let err;
227
+ if (this.messages >= this.options.maxMessages) {
228
+ err = new Error('Resource exhausted');
229
+ err.code = 'EMAXLIMIT';
230
+ this.connection.close();
231
+ this.emit('error', err);
232
+ } else {
233
+ this.pool._checkRateLimit(() => {
234
+ this.available = true;
235
+ this.emit('available');
236
+ });
237
+ }
238
+ });
239
+
240
+ callback(null, info);
241
+ });
242
+ }
243
+
244
+ /**
245
+ * Closes the connection
246
+ */
247
+ close() {
248
+ this._connected = false;
249
+ if (this.auth && this.auth.oauth2) {
250
+ this.auth.oauth2.removeAllListeners();
251
+ }
252
+ if (this.connection) {
253
+ this.connection.close();
254
+ }
255
+ this.emit('close');
256
+ }
257
+ }
258
+
259
+ module.exports = PoolResource;
@@ -0,0 +1,421 @@
1
+ 'use strict';
2
+
3
+ const EventEmitter = require('events');
4
+ const SMTPConnection = require('../smtp-connection');
5
+ const wellKnown = require('../well-known');
6
+ const shared = require('../shared');
7
+ const XOAuth2 = require('../xoauth2');
8
+ const packageData = require('../../package.json');
9
+
10
+ /**
11
+ * Creates a SMTP transport object for Nodemailer
12
+ *
13
+ * @constructor
14
+ * @param {Object} options Connection options
15
+ */
16
+ class SMTPTransport extends EventEmitter {
17
+ constructor(options) {
18
+ super();
19
+
20
+ options = options || {};
21
+
22
+ if (typeof options === 'string') {
23
+ options = {
24
+ url: options
25
+ };
26
+ }
27
+
28
+ let urlData;
29
+ let service = options.service;
30
+
31
+ if (typeof options.getSocket === 'function') {
32
+ this.getSocket = options.getSocket;
33
+ }
34
+
35
+ if (options.url) {
36
+ urlData = shared.parseConnectionUrl(options.url);
37
+ service = service || urlData.service;
38
+ }
39
+
40
+ this.options = shared.assign(
41
+ false, // create new object
42
+ options, // regular options
43
+ urlData, // url options
44
+ service && wellKnown(service) // wellknown options
45
+ );
46
+
47
+ this.logger = shared.getLogger(this.options, {
48
+ component: this.options.component || 'smtp-transport'
49
+ });
50
+
51
+ // temporary object
52
+ let connection = new SMTPConnection(this.options);
53
+
54
+ this.name = 'SMTP';
55
+ this.version = packageData.version + '[client:' + connection.version + ']';
56
+
57
+ if (this.options.auth) {
58
+ this.auth = this.getAuth({});
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Placeholder function for creating proxy sockets. This method immediatelly returns
64
+ * without a socket
65
+ *
66
+ * @param {Object} options Connection options
67
+ * @param {Function} callback Callback function to run with the socket keys
68
+ */
69
+ getSocket(options, callback) {
70
+ // return immediatelly
71
+ return setImmediate(() => callback(null, false));
72
+ }
73
+
74
+ getAuth(authOpts) {
75
+ if (!authOpts) {
76
+ return this.auth;
77
+ }
78
+
79
+ let hasAuth = false;
80
+ let authData = {};
81
+
82
+ if (this.options.auth && typeof this.options.auth === 'object') {
83
+ Object.keys(this.options.auth).forEach(key => {
84
+ hasAuth = true;
85
+ authData[key] = this.options.auth[key];
86
+ });
87
+ }
88
+
89
+ if (authOpts && typeof authOpts === 'object') {
90
+ Object.keys(authOpts).forEach(key => {
91
+ hasAuth = true;
92
+ authData[key] = authOpts[key];
93
+ });
94
+ }
95
+
96
+ if (!hasAuth) {
97
+ return false;
98
+ }
99
+
100
+ switch ((authData.type || '').toString().toUpperCase()) {
101
+ case 'OAUTH2': {
102
+ if (!authData.service && !authData.user) {
103
+ return false;
104
+ }
105
+ let oauth2 = new XOAuth2(authData, this.logger);
106
+ oauth2.provisionCallback = (this.mailer && this.mailer.get('oauth2_provision_cb')) || oauth2.provisionCallback;
107
+ oauth2.on('token', token => this.mailer.emit('token', token));
108
+ oauth2.on('error', err => this.emit('error', err));
109
+ return {
110
+ type: 'OAUTH2',
111
+ user: authData.user,
112
+ oauth2,
113
+ method: 'XOAUTH2'
114
+ };
115
+ }
116
+ default:
117
+ return {
118
+ type: (authData.type || '').toString().toUpperCase() || 'LOGIN',
119
+ user: authData.user,
120
+ credentials: {
121
+ user: authData.user || '',
122
+ pass: authData.pass,
123
+ options: authData.options
124
+ },
125
+ method: (authData.method || '').trim().toUpperCase() || this.options.authMethod || false
126
+ };
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Sends an e-mail using the selected settings
132
+ *
133
+ * @param {Object} mail Mail object
134
+ * @param {Function} callback Callback function
135
+ */
136
+ send(mail, callback) {
137
+ this.getSocket(this.options, (err, socketOptions) => {
138
+ if (err) {
139
+ return callback(err);
140
+ }
141
+
142
+ let returned = false;
143
+ let options = this.options;
144
+ if (socketOptions && socketOptions.connection) {
145
+ this.logger.info(
146
+ {
147
+ tnx: 'proxy',
148
+ remoteAddress: socketOptions.connection.remoteAddress,
149
+ remotePort: socketOptions.connection.remotePort,
150
+ destHost: options.host || '',
151
+ destPort: options.port || '',
152
+ action: 'connected'
153
+ },
154
+ 'Using proxied socket from %s:%s to %s:%s',
155
+ socketOptions.connection.remoteAddress,
156
+ socketOptions.connection.remotePort,
157
+ options.host || '',
158
+ options.port || ''
159
+ );
160
+
161
+ // only copy options if we need to modify it
162
+ options = shared.assign(false, options);
163
+ Object.keys(socketOptions).forEach(key => {
164
+ options[key] = socketOptions[key];
165
+ });
166
+ }
167
+
168
+ let connection = new SMTPConnection(options);
169
+
170
+ connection.once('error', err => {
171
+ if (returned) {
172
+ return;
173
+ }
174
+ returned = true;
175
+ connection.close();
176
+ return callback(err);
177
+ });
178
+
179
+ connection.once('end', () => {
180
+ if (returned) {
181
+ return;
182
+ }
183
+
184
+ let timer = setTimeout(() => {
185
+ if (returned) {
186
+ return;
187
+ }
188
+ returned = true;
189
+ // still have not returned, this means we have an unexpected connection close
190
+ let err = new Error('Unexpected socket close');
191
+ if (connection && connection._socket && connection._socket.upgrading) {
192
+ // starttls connection errors
193
+ err.code = 'ETLS';
194
+ }
195
+ callback(err);
196
+ }, 1000);
197
+
198
+ try {
199
+ timer.unref();
200
+ } catch (_E) {
201
+ // Ignore. Happens on envs with non-node timer implementation
202
+ }
203
+ });
204
+
205
+ let sendMessage = () => {
206
+ let envelope = mail.message.getEnvelope();
207
+ let messageId = mail.message.messageId();
208
+
209
+ let recipients = [].concat(envelope.to || []);
210
+ if (recipients.length > 3) {
211
+ recipients.push('...and ' + recipients.splice(2).length + ' more');
212
+ }
213
+
214
+ if (mail.data.dsn) {
215
+ envelope.dsn = mail.data.dsn;
216
+ }
217
+
218
+ // RFC 8689: Pass requireTLSExtensionEnabled to envelope for MAIL FROM parameter
219
+ if (mail.data.requireTLSExtensionEnabled) {
220
+ envelope.requireTLSExtensionEnabled = mail.data.requireTLSExtensionEnabled;
221
+ }
222
+
223
+ this.logger.info(
224
+ {
225
+ tnx: 'send',
226
+ messageId
227
+ },
228
+ 'Sending message %s to <%s>',
229
+ messageId,
230
+ recipients.join(', ')
231
+ );
232
+
233
+ connection.send(envelope, mail.message.createReadStream(), (err, info) => {
234
+ returned = true;
235
+ connection.close();
236
+ if (err) {
237
+ this.logger.error(
238
+ {
239
+ err,
240
+ tnx: 'send'
241
+ },
242
+ 'Send error for %s: %s',
243
+ messageId,
244
+ err.message
245
+ );
246
+ return callback(err);
247
+ }
248
+ info.envelope = {
249
+ from: envelope.from,
250
+ to: envelope.to
251
+ };
252
+ info.messageId = messageId;
253
+ try {
254
+ return callback(null, info);
255
+ } catch (E) {
256
+ this.logger.error(
257
+ {
258
+ err: E,
259
+ tnx: 'callback'
260
+ },
261
+ 'Callback error for %s: %s',
262
+ messageId,
263
+ E.message
264
+ );
265
+ }
266
+ });
267
+ };
268
+
269
+ connection.connect(() => {
270
+ if (returned) {
271
+ return;
272
+ }
273
+
274
+ let auth = this.getAuth(mail.data.auth);
275
+
276
+ if (auth && (connection.allowsAuth || options.forceAuth)) {
277
+ connection.login(auth, err => {
278
+ if (auth && auth !== this.auth && auth.oauth2) {
279
+ auth.oauth2.removeAllListeners();
280
+ }
281
+ if (returned) {
282
+ return;
283
+ }
284
+
285
+ if (err) {
286
+ returned = true;
287
+ connection.close();
288
+ return callback(err);
289
+ }
290
+
291
+ sendMessage();
292
+ });
293
+ } else {
294
+ sendMessage();
295
+ }
296
+ });
297
+ });
298
+ }
299
+
300
+ /**
301
+ * Verifies SMTP configuration
302
+ *
303
+ * @param {Function} callback Callback function
304
+ */
305
+ verify(callback) {
306
+ let promise;
307
+
308
+ if (!callback) {
309
+ promise = new Promise((resolve, reject) => {
310
+ callback = shared.callbackPromise(resolve, reject);
311
+ });
312
+ }
313
+
314
+ this.getSocket(this.options, (err, socketOptions) => {
315
+ if (err) {
316
+ return callback(err);
317
+ }
318
+
319
+ let options = this.options;
320
+ if (socketOptions && socketOptions.connection) {
321
+ this.logger.info(
322
+ {
323
+ tnx: 'proxy',
324
+ remoteAddress: socketOptions.connection.remoteAddress,
325
+ remotePort: socketOptions.connection.remotePort,
326
+ destHost: options.host || '',
327
+ destPort: options.port || '',
328
+ action: 'connected'
329
+ },
330
+ 'Using proxied socket from %s:%s to %s:%s',
331
+ socketOptions.connection.remoteAddress,
332
+ socketOptions.connection.remotePort,
333
+ options.host || '',
334
+ options.port || ''
335
+ );
336
+
337
+ options = shared.assign(false, options);
338
+ Object.keys(socketOptions).forEach(key => {
339
+ options[key] = socketOptions[key];
340
+ });
341
+ }
342
+
343
+ let connection = new SMTPConnection(options);
344
+ let returned = false;
345
+
346
+ connection.once('error', err => {
347
+ if (returned) {
348
+ return;
349
+ }
350
+ returned = true;
351
+ connection.close();
352
+ return callback(err);
353
+ });
354
+
355
+ connection.once('end', () => {
356
+ if (returned) {
357
+ return;
358
+ }
359
+ returned = true;
360
+ return callback(new Error('Connection closed'));
361
+ });
362
+
363
+ let finalize = () => {
364
+ if (returned) {
365
+ return;
366
+ }
367
+ returned = true;
368
+ connection.quit();
369
+ return callback(null, true);
370
+ };
371
+
372
+ connection.connect(() => {
373
+ if (returned) {
374
+ return;
375
+ }
376
+
377
+ let authData = this.getAuth({});
378
+
379
+ if (authData && (connection.allowsAuth || options.forceAuth)) {
380
+ connection.login(authData, err => {
381
+ if (returned) {
382
+ return;
383
+ }
384
+
385
+ if (err) {
386
+ returned = true;
387
+ connection.close();
388
+ return callback(err);
389
+ }
390
+
391
+ finalize();
392
+ });
393
+ } else if (!authData && connection.allowsAuth && options.forceAuth) {
394
+ let err = new Error('Authentication info was not provided');
395
+ err.code = 'NoAuth';
396
+
397
+ returned = true;
398
+ connection.close();
399
+ return callback(err);
400
+ } else {
401
+ finalize();
402
+ }
403
+ });
404
+ });
405
+
406
+ return promise;
407
+ }
408
+
409
+ /**
410
+ * Releases resources
411
+ */
412
+ close() {
413
+ if (this.auth && this.auth.oauth2) {
414
+ this.auth.oauth2.removeAllListeners();
415
+ }
416
+ this.emit('close');
417
+ }
418
+ }
419
+
420
+ // expose to the world
421
+ module.exports = SMTPTransport;