@nocobase/plugin-workflow-mailer 2.2.19 → 2.2.21

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 (173) hide show
  1. package/dist/externalVersion.js +6 -6
  2. package/dist/node_modules/joi/package.json +1 -1
  3. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.d.ts +59 -0
  4. package/dist/node_modules/nodemailer/dist/cjs/addressparser/index.js +790 -0
  5. package/dist/node_modules/nodemailer/dist/cjs/base64/index.d.ts +36 -0
  6. package/dist/node_modules/nodemailer/dist/cjs/base64/index.js +119 -0
  7. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.d.ts +52 -0
  8. package/dist/node_modules/nodemailer/dist/cjs/dkim/index.js +228 -0
  9. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.d.ts +48 -0
  10. package/dist/node_modules/nodemailer/dist/cjs/dkim/message-parser.js +180 -0
  11. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.d.ts +36 -0
  12. package/dist/node_modules/nodemailer/dist/cjs/dkim/relaxed-body.js +148 -0
  13. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.d.ts +52 -0
  14. package/dist/node_modules/nodemailer/dist/cjs/dkim/sign.js +165 -0
  15. package/dist/node_modules/nodemailer/dist/cjs/errors.d.ts +96 -0
  16. package/dist/node_modules/nodemailer/dist/cjs/errors.js +70 -0
  17. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.d.ts +107 -0
  18. package/dist/node_modules/nodemailer/dist/cjs/fetch/cookies.js +282 -0
  19. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.d.ts +65 -0
  20. package/dist/node_modules/nodemailer/dist/cjs/fetch/index.js +384 -0
  21. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.d.ts +64 -0
  22. package/dist/node_modules/nodemailer/dist/cjs/json-transport/index.js +99 -0
  23. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.d.ts +174 -0
  24. package/dist/node_modules/nodemailer/dist/cjs/mail-composer/index.js +613 -0
  25. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.d.ts +237 -0
  26. package/dist/node_modules/nodemailer/dist/cjs/mailer/index.js +415 -0
  27. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.d.ts +97 -0
  28. package/dist/node_modules/nodemailer/dist/cjs/mailer/mail-message.js +342 -0
  29. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.d.ts +161 -0
  30. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/index.js +787 -0
  31. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.d.ts +2 -0
  32. package/dist/node_modules/nodemailer/dist/cjs/mime-funcs/mime-types.js +2103 -0
  33. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.d.ts +333 -0
  34. package/dist/node_modules/nodemailer/dist/cjs/mime-node/index.js +1493 -0
  35. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.d.ts +5 -0
  36. package/dist/node_modules/nodemailer/dist/cjs/mime-node/last-newline.js +32 -0
  37. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.d.ts +9 -0
  38. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-unix.js +40 -0
  39. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.d.ts +10 -0
  40. package/dist/node_modules/nodemailer/dist/cjs/mime-node/le-windows.js +47 -0
  41. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.d.ts +124 -0
  42. package/dist/node_modules/nodemailer/dist/cjs/nodemailer.js +1 -0
  43. package/dist/node_modules/nodemailer/dist/cjs/package-info.d.ts +3 -0
  44. package/dist/node_modules/nodemailer/dist/cjs/package-info.js +7 -0
  45. package/dist/node_modules/nodemailer/dist/cjs/package.json +3 -0
  46. package/dist/node_modules/nodemailer/dist/cjs/punycode/index.d.ts +73 -0
  47. package/dist/node_modules/nodemailer/{lib → dist/cjs}/punycode/index.js +62 -111
  48. package/dist/node_modules/nodemailer/dist/cjs/qp/index.d.ts +32 -0
  49. package/dist/node_modules/nodemailer/dist/cjs/qp/index.js +207 -0
  50. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.d.ts +69 -0
  51. package/dist/node_modules/nodemailer/dist/cjs/sendmail-transport/index.js +210 -0
  52. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.d.ts +112 -0
  53. package/dist/node_modules/nodemailer/dist/cjs/ses-transport/index.js +252 -0
  54. package/dist/node_modules/nodemailer/dist/cjs/shared/index.d.ts +260 -0
  55. package/dist/node_modules/nodemailer/dist/cjs/shared/index.js +680 -0
  56. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.d.ts +23 -0
  57. package/dist/node_modules/nodemailer/dist/cjs/shared/objects.js +43 -0
  58. package/dist/node_modules/nodemailer/dist/cjs/shared/url.d.ts +21 -0
  59. package/dist/node_modules/nodemailer/dist/cjs/shared/url.js +255 -0
  60. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.d.ts +15 -0
  61. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/data-stream.js +108 -0
  62. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.d.ts +47 -0
  63. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/http-proxy-client.js +189 -0
  64. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.d.ts +416 -0
  65. package/dist/node_modules/nodemailer/dist/cjs/smtp-connection/index.js +1837 -0
  66. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.d.ts +133 -0
  67. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/index.js +569 -0
  68. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.d.ts +62 -0
  69. package/dist/node_modules/nodemailer/dist/cjs/smtp-pool/pool-resource.js +257 -0
  70. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.d.ts +156 -0
  71. package/dist/node_modules/nodemailer/dist/cjs/smtp-transport/index.js +371 -0
  72. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.d.ts +65 -0
  73. package/dist/node_modules/nodemailer/dist/cjs/stream-transport/index.js +146 -0
  74. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.d.ts +35 -0
  75. package/dist/node_modules/nodemailer/dist/cjs/well-known/index.js +41 -0
  76. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.d.ts +2 -0
  77. package/dist/node_modules/nodemailer/dist/cjs/well-known/services.js +674 -0
  78. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.d.ts +201 -0
  79. package/dist/node_modules/nodemailer/dist/cjs/xoauth2/index.js +426 -0
  80. package/dist/node_modules/nodemailer/dist/esm/addressparser/index.d.ts +59 -0
  81. package/dist/node_modules/nodemailer/{lib → dist/esm}/addressparser/index.js +361 -131
  82. package/dist/node_modules/nodemailer/dist/esm/base64/index.d.ts +36 -0
  83. package/dist/node_modules/nodemailer/{lib → dist/esm}/base64/index.js +31 -56
  84. package/dist/node_modules/nodemailer/dist/esm/dkim/index.d.ts +52 -0
  85. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/index.js +49 -78
  86. package/dist/node_modules/nodemailer/dist/esm/dkim/message-parser.d.ts +48 -0
  87. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/message-parser.js +64 -42
  88. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.d.ts +36 -0
  89. package/dist/node_modules/nodemailer/dist/esm/dkim/relaxed-body.js +141 -0
  90. package/dist/node_modules/nodemailer/dist/esm/dkim/sign.d.ts +52 -0
  91. package/dist/node_modules/nodemailer/{lib → dist/esm}/dkim/sign.js +50 -46
  92. package/dist/node_modules/nodemailer/dist/esm/errors.d.ts +96 -0
  93. package/dist/node_modules/nodemailer/{lib → dist/esm}/errors.js +26 -18
  94. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.d.ts +107 -0
  95. package/dist/node_modules/nodemailer/dist/esm/fetch/cookies.js +242 -0
  96. package/dist/node_modules/nodemailer/dist/esm/fetch/index.d.ts +65 -0
  97. package/dist/node_modules/nodemailer/{lib → dist/esm}/fetch/index.js +80 -147
  98. package/dist/node_modules/nodemailer/dist/esm/json-transport/index.d.ts +64 -0
  99. package/dist/node_modules/nodemailer/{lib → dist/esm}/json-transport/index.js +19 -39
  100. package/dist/node_modules/nodemailer/dist/esm/mail-composer/index.d.ts +174 -0
  101. package/dist/node_modules/nodemailer/{lib → dist/esm}/mail-composer/index.js +199 -265
  102. package/dist/node_modules/nodemailer/dist/esm/mailer/index.d.ts +237 -0
  103. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/index.js +128 -234
  104. package/dist/node_modules/nodemailer/dist/esm/mailer/mail-message.d.ts +97 -0
  105. package/dist/node_modules/nodemailer/{lib → dist/esm}/mailer/mail-message.js +62 -114
  106. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.d.ts +161 -0
  107. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/index.js +738 -0
  108. package/dist/node_modules/nodemailer/dist/esm/mime-funcs/mime-types.d.ts +2 -0
  109. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-funcs/mime-types.js +29 -42
  110. package/dist/node_modules/nodemailer/dist/esm/mime-node/index.d.ts +333 -0
  111. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/index.js +259 -372
  112. package/dist/node_modules/nodemailer/dist/esm/mime-node/last-newline.d.ts +5 -0
  113. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/last-newline.js +4 -10
  114. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-unix.d.ts +9 -0
  115. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-unix.js +6 -11
  116. package/dist/node_modules/nodemailer/dist/esm/mime-node/le-windows.d.ts +10 -0
  117. package/dist/node_modules/nodemailer/{lib → dist/esm}/mime-node/le-windows.js +6 -13
  118. package/dist/node_modules/nodemailer/dist/esm/nodemailer.d.ts +124 -0
  119. package/dist/node_modules/nodemailer/dist/esm/nodemailer.js +166 -0
  120. package/dist/node_modules/nodemailer/dist/esm/package-info.d.ts +3 -0
  121. package/dist/node_modules/nodemailer/dist/esm/package-info.js +4 -0
  122. package/dist/node_modules/nodemailer/dist/esm/package.json +3 -0
  123. package/dist/node_modules/nodemailer/dist/esm/punycode/index.d.ts +73 -0
  124. package/dist/node_modules/nodemailer/dist/esm/punycode/index.js +405 -0
  125. package/dist/node_modules/nodemailer/dist/esm/qp/index.d.ts +32 -0
  126. package/dist/node_modules/nodemailer/{lib → dist/esm}/qp/index.js +38 -67
  127. package/dist/node_modules/nodemailer/dist/esm/sendmail-transport/index.d.ts +69 -0
  128. package/dist/node_modules/nodemailer/{lib → dist/esm}/sendmail-transport/index.js +51 -101
  129. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.d.ts +112 -0
  130. package/dist/node_modules/nodemailer/dist/esm/ses-transport/index.js +212 -0
  131. package/dist/node_modules/nodemailer/dist/esm/shared/index.d.ts +260 -0
  132. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/index.js +156 -272
  133. package/dist/node_modules/nodemailer/dist/esm/shared/objects.d.ts +23 -0
  134. package/dist/node_modules/nodemailer/{lib → dist/esm}/shared/objects.js +13 -17
  135. package/dist/node_modules/nodemailer/dist/esm/shared/url.d.ts +21 -0
  136. package/dist/node_modules/nodemailer/dist/esm/shared/url.js +214 -0
  137. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.d.ts +15 -0
  138. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/data-stream.js +103 -0
  139. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/http-proxy-client.d.ts +47 -0
  140. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/http-proxy-client.js +49 -74
  141. package/dist/node_modules/nodemailer/dist/esm/smtp-connection/index.d.ts +416 -0
  142. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-connection/index.js +574 -794
  143. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/index.d.ts +133 -0
  144. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/index.js +172 -284
  145. package/dist/node_modules/nodemailer/dist/esm/smtp-pool/pool-resource.d.ts +62 -0
  146. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-pool/pool-resource.js +57 -97
  147. package/dist/node_modules/nodemailer/dist/esm/smtp-transport/index.d.ts +156 -0
  148. package/dist/node_modules/nodemailer/{lib → dist/esm}/smtp-transport/index.js +81 -179
  149. package/dist/node_modules/nodemailer/dist/esm/stream-transport/index.d.ts +65 -0
  150. package/dist/node_modules/nodemailer/{lib → dist/esm}/stream-transport/index.js +36 -74
  151. package/dist/node_modules/nodemailer/dist/esm/well-known/index.d.ts +35 -0
  152. package/dist/node_modules/nodemailer/{lib → dist/esm}/well-known/index.js +5 -16
  153. package/dist/node_modules/nodemailer/dist/esm/well-known/services.d.ts +2 -0
  154. package/dist/node_modules/nodemailer/dist/esm/well-known/services.js +671 -0
  155. package/dist/node_modules/nodemailer/dist/esm/xoauth2/index.d.ts +201 -0
  156. package/dist/node_modules/nodemailer/{lib → dist/esm}/xoauth2/index.js +125 -187
  157. package/dist/node_modules/nodemailer/{lib → dist}/well-known/services.json +9 -2
  158. package/dist/node_modules/nodemailer/package.json +1 -1
  159. package/package.json +3 -3
  160. package/dist/node_modules/nodemailer/.gitattributes +0 -6
  161. package/dist/node_modules/nodemailer/.ncurc.js +0 -9
  162. package/dist/node_modules/nodemailer/.prettierignore +0 -8
  163. package/dist/node_modules/nodemailer/.prettierrc +0 -12
  164. package/dist/node_modules/nodemailer/.prettierrc.js +0 -10
  165. package/dist/node_modules/nodemailer/.release-please-config.json +0 -9
  166. package/dist/node_modules/nodemailer/eslint.config.js +0 -88
  167. package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  168. package/dist/node_modules/nodemailer/lib/fetch/cookies.js +0 -276
  169. package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +0 -671
  170. package/dist/node_modules/nodemailer/lib/nodemailer.js +0 -1
  171. package/dist/node_modules/nodemailer/lib/ses-transport/index.js +0 -266
  172. package/dist/node_modules/nodemailer/lib/shared/url.js +0 -151
  173. package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -105
@@ -0,0 +1,237 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import * as shared from '../shared/index.js';
3
+ import DKIM, { type DKIMOptions } from '../dkim/index.js';
4
+ import MailMessage, { type MailDefaults, type SendMailOptions } from './mail-message.js';
5
+ import net from 'node:net';
6
+ import type { ConnectionOptions } from 'node:tls';
7
+ import type { MailComposerAlternative, MailComposerAttachment, MailComposerIcalEvent, MailComposerListHeaderEntry, MailComposerListHeaders, MailComposerTextEncoding } from '../mail-composer/index.js';
8
+ import type { Callback, NodemailerError, ResultCallback } from '../errors.js';
9
+ import type { ParsedUrl } from '../shared/url.js';
10
+ import type { MimeNodeAddress, MimeNodeEnvelope, MimeNodeEnvelopeInput, MimeNodeHeaders, MimeNodeOptions } from '../mime-node/index.js';
11
+ import type { XOAuth2ProvisionCallback } from '../xoauth2/index.js';
12
+ export type { SendMailOptions, MailDefaults, MailMessageData, MailMessageDataCallback, MailMessageContentCallback, MailMessageListHeader, MailMessageListHeaderValue } from './mail-message.js';
13
+ export type { default as MailMessage } from './mail-message.js';
14
+ /**
15
+ * The base shape of the object a transport hands back for a sent message. Every bundled
16
+ * transport sets the envelope and the Message-ID, the rest depends on the transport.
17
+ *
18
+ * The index signature keeps a transport specific field readable through this type, the way
19
+ * the `any` typed result of @types/nodemailer was, and it is also what a result type has
20
+ * to inherit to stay assignable to it, so the result type of a transport outside this
21
+ * package has to extend this interface rather than restate it
22
+ */
23
+ export interface SentMessageInfo {
24
+ /** The envelope the message was sent with */
25
+ envelope: MimeNodeEnvelope;
26
+ /** Message-ID of the sent message */
27
+ messageId: string;
28
+ /** Recipient addresses the transport accepted */
29
+ accepted?: string[] | undefined;
30
+ /** Recipient addresses the transport rejected */
31
+ rejected?: string[] | undefined;
32
+ /** Recipient addresses left pending, LMTP reports these */
33
+ pending?: string[] | undefined;
34
+ /** Last response from the server */
35
+ response?: string | undefined;
36
+ /** The generated message, for the transports that hand it back instead of sending it */
37
+ message?: any;
38
+ /** Transport specific fields */
39
+ [key: string]: any;
40
+ }
41
+ /**
42
+ * Callback for sendMail, receives the transport result once the transport has taken the
43
+ * message
44
+ */
45
+ export type SendMailCallback<T = SentMessageInfo> = (err: NodemailerError | null, info: T) => void;
46
+ /**
47
+ * Callback for verify(), success is true once the transport accepted the configuration.
48
+ * Declared with a required success value, the way @types/nodemailer declared it, the
49
+ * error path hands over the error alone
50
+ */
51
+ export type VerifyCallback = Callback<true>;
52
+ /**
53
+ * Callback a plugin calls once it is done, an error aborts the send
54
+ */
55
+ export type PluginCallback = (err?: NodemailerError | null) => void;
56
+ /**
57
+ * A plugin registered with use(): receives the message and a callback to call once done
58
+ */
59
+ export type PluginFunction<T = SentMessageInfo> = (mail: MailMessage<T>, callback: PluginCallback) => void;
60
+ /**
61
+ * Connection options a getSocket handler receives: the options of the transport asking for
62
+ * the socket, with the host and port to connect to
63
+ */
64
+ export interface GetSocketOptions {
65
+ host?: string | undefined;
66
+ port?: number | undefined;
67
+ [key: string]: any;
68
+ }
69
+ /**
70
+ * The result of a getSocket handler, the socket to use for the connection. The object is
71
+ * merged into the connection options, so it may carry any of those as well
72
+ */
73
+ export interface SocketOptions {
74
+ /** An established socket, the proxied connection */
75
+ connection?: net.Socket | undefined;
76
+ [key: string]: any;
77
+ }
78
+ /**
79
+ * Receives the socket options from a getSocket handler, false when a new socket should be
80
+ * opened, or the error that prevented the connection
81
+ */
82
+ export type GetSocketCallback = (err: Error | null, socketOptions?: SocketOptions | false) => void;
83
+ /**
84
+ * A socket handler. Mail sets one on the transport as getSocket when a proxy is configured,
85
+ * the SMTP transports call it to get a proxied socket instead of connecting directly
86
+ */
87
+ export type GetSocketHandler = (options: GetSocketOptions, callback: GetSocketCallback) => void;
88
+ /**
89
+ * A custom proxy handler, registered with set('proxy_handler_' + protocol, handler) for the
90
+ * protocol of the proxy url
91
+ */
92
+ export type ProxyHandler = (proxy: ParsedUrl, options: GetSocketOptions, callback: GetSocketCallback) => void;
93
+ /**
94
+ * Well known keys of the meta store, see set() and get(): the OAuth2 token provisioning
95
+ * callback the SMTP transports use, the socks module for socks proxies, and a custom proxy
96
+ * handler per proxy protocol
97
+ */
98
+ export interface MailMeta {
99
+ /** Called by the SMTP transports when a new OAuth2 access token is needed */
100
+ oauth2_provision_cb: XOAuth2ProvisionCallback;
101
+ /** The socks module, v1 or v2, used to connect through a socks proxy */
102
+ proxy_socks_module: any;
103
+ [key: `proxy_handler_${string}`]: ProxyHandler;
104
+ [key: string]: any;
105
+ }
106
+ /**
107
+ * A transport as consumed by Mail: any object with a name, a version and a send method
108
+ * works, the rest is optional. Mail forwards its close, isIdle and verify calls to the
109
+ * methods of the same name as they are, so their arguments are up to the transport.
110
+ *
111
+ * D is the options type of the transport, the second type parameter @types/nodemailer
112
+ * declared on Transport, Transporter and Mail
113
+ */
114
+ export interface Transport<T = SentMessageInfo, D extends TransportOptions = TransportOptions> {
115
+ /** Transport name, used for logging */
116
+ name: string;
117
+ /** Transport version, used for logging */
118
+ version: string;
119
+ /** Hands a message to the transport, the callback receives the transport result */
120
+ send(mail: MailMessage<T>, callback: ResultCallback<T>): void;
121
+ /** Checks the configuration, the SMTP transports connect and authenticate for it */
122
+ verify?(...args: any[]): any;
123
+ /** Closes the transport */
124
+ close?(...args: any[]): any;
125
+ /** Tells whether the transport can take a message right away */
126
+ isIdle?(...args: any[]): any;
127
+ /** Registers an event listener, the transport may emit 'log', 'error', 'idle' and 'clear' */
128
+ on?(event: string | symbol, listener: (...args: any[]) => void): this;
129
+ /** The Mail object the transport belongs to, set by Mail */
130
+ mailer?: Mail<T, D> | undefined;
131
+ /** Socket handler for a proxied connection, set by Mail when a proxy is configured */
132
+ getSocket?: GetSocketHandler | undefined;
133
+ }
134
+ /**
135
+ * Transport configuration as read by Mail itself. The transport reads its own options from
136
+ * the same object, see the transport for those
137
+ */
138
+ export interface TransportOptions {
139
+ /** Bunyan compatible logger, true for the default console logger, false or unset for no logging */
140
+ logger?: shared.ExternalLogger | boolean | undefined;
141
+ /** Component name for the log lines, defaults to 'mail' */
142
+ component?: string | undefined;
143
+ /** DKIM signing options, every message is signed with these unless it carries its own */
144
+ dkim?: DKIMOptions | undefined;
145
+ /** Proxy url. http(s) proxies work as is, socks proxies need the socks module set with set('proxy_socks_module', socks) */
146
+ proxy?: string | undefined;
147
+ /** TLS options, rejectUnauthorized applies to an https proxy as well */
148
+ tls?: ConnectionOptions | undefined;
149
+ /** Reject content that points to a file path, forced onto every message */
150
+ disableFileAccess?: boolean | undefined;
151
+ /** Reject content that points to a URL, forced onto every message */
152
+ disableUrlAccess?: boolean | undefined;
153
+ /** Method to normalize header keys for custom caseing, forced onto every message */
154
+ normalizeHeaderKey?: MimeNodeOptions['normalizeHeaderKey'] | undefined;
155
+ /** Recipients allowed on one message, forced onto every message, 0 disables the limit, defaults to 100000 */
156
+ maxRecipients?: number | undefined;
157
+ /** Convert data: images in the html into embedded attachments */
158
+ attachDataUrls?: boolean | undefined;
159
+ }
160
+ /**
161
+ * The transporter object createTransport returns, a Mail instance wrapping a transport. D
162
+ * is the options type of the transport, it types the options field of the transporter
163
+ */
164
+ export type Transporter<T = SentMessageInfo, D extends TransportOptions = TransportOptions> = Mail<T, D>;
165
+ /**
166
+ * Creates an object for exposing the Mail API
167
+ *
168
+ * @constructor
169
+ * @param transporter Transport object instance to pass the mails to
170
+ */
171
+ declare class Mail<out T = SentMessageInfo, out D extends TransportOptions = TransportOptions> extends EventEmitter {
172
+ options: D;
173
+ /** Message defaults given to createTransport, kept public because the DefinitelyTyped typings declared it */
174
+ _defaults: MailDefaults;
175
+ meta: Map<string, any>;
176
+ dkim: DKIM | false;
177
+ transporter: Transport<T, D>;
178
+ logger: shared.Logger;
179
+ /** Closes the transport, the pooled SMTP transport closes its connections */
180
+ close: () => void;
181
+ /** Tells whether the transport can take a message right away */
182
+ isIdle: () => boolean;
183
+ /** Checks the configuration, the SMTP transports connect and authenticate for it */
184
+ verify: {
185
+ (callback: VerifyCallback): void;
186
+ (): Promise<true>;
187
+ };
188
+ /** Socket handler for a proxied connection, set by setupProxy and handed to the transport on the next send */
189
+ getSocket?: GetSocketHandler | false | undefined;
190
+ constructor(transporter: Transport<T, D>, options?: D, defaults?: MailDefaults);
191
+ use(step: string, plugin: PluginFunction<T>): this;
192
+ /**
193
+ * Sends an email using the preselected transport object
194
+ *
195
+ * @param data E-data description
196
+ * @returns Promise that resolves with the result of the send
197
+ */
198
+ sendMail(data: SendMailOptions): Promise<T>;
199
+ /**
200
+ * Sends an email using the preselected transport object
201
+ *
202
+ * @param data E-data description
203
+ * @param callback Callback to run once the sending succeeded or failed
204
+ */
205
+ sendMail(data: SendMailOptions, callback: SendMailCallback<T>): void;
206
+ getVersionString(): string;
207
+ /**
208
+ * Sets up proxy handler for a Nodemailer object
209
+ *
210
+ * @param proxyUrl Proxy configuration url
211
+ */
212
+ setupProxy(proxyUrl: string): void;
213
+ set<K extends keyof MailMeta & string>(key: K, value: MailMeta[K]): Map<string, any>;
214
+ get<K extends keyof MailMeta & string>(key: K): MailMeta[K] | undefined;
215
+ }
216
+ /**
217
+ * Type aliases in the layout of @types/nodemailer, so `Mail.Options` style references keep working
218
+ */
219
+ type MailPluginFunction<T> = PluginFunction<T>;
220
+ declare namespace Mail {
221
+ type Options = SendMailOptions;
222
+ type Address = MimeNodeAddress;
223
+ type Attachment = MailComposerAttachment;
224
+ type AttachmentLike = MailComposerAlternative;
225
+ type AmpAttachment = MailComposerAlternative;
226
+ type IcalAttachment = MailComposerIcalEvent;
227
+ type Headers = MimeNodeHeaders;
228
+ type ListHeader = MailComposerListHeaderEntry;
229
+ type ListHeaders = MailComposerListHeaders;
230
+ type Envelope = MimeNodeEnvelopeInput;
231
+ type Connection = SocketOptions;
232
+ type TextEncoding = MailComposerTextEncoding;
233
+ type PluginFunction<T = SentMessageInfo> = MailPluginFunction<T>;
234
+ }
235
+ /** The same aliases as module level exports, for `import * as Mail` and `import Mail = require()` */
236
+ export type { SendMailOptions as Options, MimeNodeAddress as Address, MailComposerAttachment as Attachment, MailComposerAlternative as AttachmentLike, MailComposerAlternative as AmpAttachment, MailComposerIcalEvent as IcalAttachment, MimeNodeHeaders as Headers, MailComposerListHeaderEntry as ListHeader, MailComposerListHeaders as ListHeaders, MimeNodeEnvelopeInput as Envelope, SocketOptions as Connection, MailComposerTextEncoding as TextEncoding };
237
+ export default Mail;
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_events_1 = require("node:events");
40
+ const shared = __importStar(require("../shared/index.js"));
41
+ const mimeTypes = __importStar(require("../mime-funcs/mime-types.js"));
42
+ const index_js_1 = __importDefault(require("../mail-composer/index.js"));
43
+ const index_js_2 = __importDefault(require("../dkim/index.js"));
44
+ const http_proxy_client_js_1 = __importDefault(require("../smtp-connection/http-proxy-client.js"));
45
+ const errors = __importStar(require("../errors.js"));
46
+ const node_util_1 = __importDefault(require("node:util"));
47
+ const urllib = __importStar(require("../shared/url.js"));
48
+ const packageData = __importStar(require("../package-info.js"));
49
+ const mail_message_js_1 = __importDefault(require("./mail-message.js"));
50
+ const node_net_1 = __importDefault(require("node:net"));
51
+ const node_dns_1 = __importDefault(require("node:dns"));
52
+ const node_crypto_1 = __importDefault(require("node:crypto"));
53
+ /**
54
+ * Recipients allowed on one message unless the caller sets its own maxRecipients. A backstop
55
+ * against a runaway or hostile recipient list rather than a delivery policy: RFC 5321 only
56
+ * asks a server to accept 100, so a real send is bounded far below this.
57
+ */
58
+ const DEFAULT_MAX_RECIPIENTS = 100000;
59
+ /**
60
+ * Creates an object for exposing the Mail API
61
+ *
62
+ * @constructor
63
+ * @param transporter Transport object instance to pass the mails to
64
+ */
65
+ class Mail extends node_events_1.EventEmitter {
66
+ constructor(transporter, options, defaults) {
67
+ super();
68
+ this.options = options || {};
69
+ this._defaults = defaults || {};
70
+ this._defaultPlugins = {
71
+ compile: [(...args) => this._convertDataImages(...args)],
72
+ stream: []
73
+ };
74
+ this._userPlugins = {
75
+ compile: [],
76
+ stream: []
77
+ };
78
+ this.meta = new Map();
79
+ this.dkim = this.options.dkim ? new index_js_2.default(this.options.dkim) : false;
80
+ this.transporter = transporter;
81
+ this.transporter.mailer = this;
82
+ this.logger = shared.getLogger(this.options, {
83
+ component: this.options.component || 'mail'
84
+ });
85
+ this.logger.debug({
86
+ tnx: 'create'
87
+ }, 'Creating transport: %s', this.getVersionString());
88
+ // setup emit handlers for the transporter
89
+ if (typeof this.transporter.on === 'function') {
90
+ // deprecated log interface
91
+ this.transporter.on('log', log => {
92
+ this.logger.debug({
93
+ tnx: 'transport'
94
+ }, '%s: %s', log.type, log.message);
95
+ });
96
+ // transporter errors
97
+ this.transporter.on('error', err => {
98
+ this.logger.error({
99
+ err,
100
+ tnx: 'transport'
101
+ }, 'Transport Error: %s', err.message);
102
+ this.emit('error', err);
103
+ });
104
+ // indicates if the sender has became idle
105
+ this.transporter.on('idle', (...args) => {
106
+ this.emit('idle', ...args);
107
+ });
108
+ // indicates if the sender has became idle and all connections are terminated
109
+ this.transporter.on('clear', (...args) => {
110
+ this.emit('clear', ...args);
111
+ });
112
+ }
113
+ /**
114
+ * Optional methods passed to the underlying transport object
115
+ */
116
+ ['close', 'isIdle', 'verify'].forEach(method => {
117
+ this[method] = (...args) => {
118
+ if (typeof this.transporter[method] === 'function') {
119
+ if (method === 'verify' && typeof this.getSocket === 'function') {
120
+ this.transporter.getSocket = this.getSocket;
121
+ this.getSocket = false;
122
+ }
123
+ return this.transporter[method](...args);
124
+ }
125
+ this.logger.warn({
126
+ tnx: 'transport',
127
+ methodName: method
128
+ }, 'Non existing method %s called for transport', method);
129
+ return false;
130
+ };
131
+ });
132
+ // setup proxy handling
133
+ if (this.options.proxy && typeof this.options.proxy === 'string') {
134
+ this.setupProxy(this.options.proxy);
135
+ }
136
+ }
137
+ use(step, plugin) {
138
+ step = (step || '').toString();
139
+ if (!this._userPlugins.hasOwnProperty(step)) {
140
+ this._userPlugins[step] = [plugin];
141
+ }
142
+ else {
143
+ this._userPlugins[step].push(plugin);
144
+ }
145
+ return this;
146
+ }
147
+ sendMail(data, callback = null) {
148
+ let promise;
149
+ if (!callback) {
150
+ promise = new Promise((resolve, reject) => {
151
+ callback = shared.callbackPromise(resolve, reject);
152
+ });
153
+ }
154
+ const done = callback;
155
+ if (typeof this.getSocket === 'function') {
156
+ this.transporter.getSocket = this.getSocket;
157
+ this.getSocket = false;
158
+ }
159
+ const mail = new mail_message_js_1.default(this, data);
160
+ this.logger.debug({
161
+ tnx: 'transport',
162
+ name: this.transporter.name,
163
+ version: this.transporter.version,
164
+ action: 'send'
165
+ }, 'Sending mail using %s/%s', this.transporter.name, this.transporter.version);
166
+ this._processPlugins('compile', mail, err => {
167
+ if (err) {
168
+ this.logger.error({
169
+ err,
170
+ tnx: 'plugin',
171
+ action: 'compile'
172
+ }, 'PluginCompile Error: %s', err.message);
173
+ return done(err);
174
+ }
175
+ let recipientCount;
176
+ try {
177
+ mail.message = new index_js_1.default(mail.data).compile();
178
+ mail.setMailerHeader();
179
+ mail.setPriorityHeaders();
180
+ mail.setListHeaders();
181
+ recipientCount = mail.message.getEnvelope().to.length;
182
+ }
183
+ catch (err) {
184
+ // message data can throw while it is compiled, the error belongs to the callback
185
+ this.logger.error({
186
+ err,
187
+ tnx: 'transport',
188
+ action: 'send'
189
+ }, 'Compile Error: %s', err.message);
190
+ return done(err);
191
+ }
192
+ const maxRecipients = mail.data.maxRecipients === undefined ? DEFAULT_MAX_RECIPIENTS : mail.data.maxRecipients;
193
+ if (maxRecipients && recipientCount > maxRecipients) {
194
+ const err = new Error(`Message has ${recipientCount} recipients, which is over the ${maxRecipients} allowed by maxRecipients`);
195
+ err.code = errors.EMAXRECIPIENTS;
196
+ this.logger.error({
197
+ err,
198
+ tnx: 'transport',
199
+ action: 'send'
200
+ }, 'Send Error: %s', err.message);
201
+ return done(err);
202
+ }
203
+ this._processPlugins('stream', mail, err => {
204
+ if (err) {
205
+ this.logger.error({
206
+ err,
207
+ tnx: 'plugin',
208
+ action: 'stream'
209
+ }, 'PluginStream Error: %s', err.message);
210
+ return done(err);
211
+ }
212
+ if (mail.data.dkim || this.dkim) {
213
+ mail.message.processFunc(input => {
214
+ const dkim = mail.data.dkim ? new index_js_2.default(mail.data.dkim) : this.dkim;
215
+ this.logger.debug({
216
+ tnx: 'DKIM',
217
+ messageId: mail.message.messageId(),
218
+ dkimDomains: dkim.keys.map(key => key.keySelector + '.' + key.domainName).join(', ')
219
+ }, 'Signing outgoing message with %s keys', dkim.keys.length);
220
+ return dkim.sign(input, mail.data._dkim);
221
+ });
222
+ }
223
+ this.transporter.send(mail, (...args) => {
224
+ if (args[0]) {
225
+ this.logger.error({
226
+ err: args[0],
227
+ tnx: 'transport',
228
+ action: 'send'
229
+ }, 'Send Error: %s', args[0].message);
230
+ }
231
+ done(...args);
232
+ });
233
+ });
234
+ });
235
+ return promise;
236
+ }
237
+ getVersionString() {
238
+ return node_util_1.default.format('%s (%s; +%s; %s/%s)', packageData.name, packageData.version, packageData.homepage, this.transporter.name, this.transporter.version);
239
+ }
240
+ /** @internal */
241
+ _processPlugins(step, mail, callback) {
242
+ step = (step || '').toString();
243
+ if (!this._userPlugins.hasOwnProperty(step)) {
244
+ return callback();
245
+ }
246
+ const userPlugins = this._userPlugins[step] || [];
247
+ const defaultPlugins = this._defaultPlugins[step] || [];
248
+ if (userPlugins.length) {
249
+ this.logger.debug({
250
+ tnx: 'transaction',
251
+ pluginCount: userPlugins.length,
252
+ step
253
+ }, 'Using %s plugins for %s', userPlugins.length, step);
254
+ }
255
+ if (userPlugins.length + defaultPlugins.length === 0) {
256
+ return callback();
257
+ }
258
+ let pos = 0;
259
+ let block = 'default';
260
+ const processPlugins = () => {
261
+ let curplugins = block === 'default' ? defaultPlugins : userPlugins;
262
+ if (pos >= curplugins.length) {
263
+ if (block === 'default' && userPlugins.length) {
264
+ block = 'user';
265
+ pos = 0;
266
+ curplugins = userPlugins;
267
+ }
268
+ else {
269
+ return callback();
270
+ }
271
+ }
272
+ const plugin = curplugins[pos++];
273
+ plugin(mail, err => {
274
+ if (err) {
275
+ return callback(err);
276
+ }
277
+ processPlugins();
278
+ });
279
+ };
280
+ processPlugins();
281
+ }
282
+ /**
283
+ * Sets up proxy handler for a Nodemailer object
284
+ *
285
+ * @param proxyUrl Proxy configuration url
286
+ */
287
+ setupProxy(proxyUrl) {
288
+ const proxy = urllib.parse(proxyUrl);
289
+ // setup socket handler for the mailer object
290
+ this.getSocket = (options, callback) => {
291
+ const protocol = proxy.protocol.replace(/:$/, '').toLowerCase();
292
+ if (this.meta.has('proxy_handler_' + protocol)) {
293
+ return this.meta.get('proxy_handler_' + protocol)(proxy, options, callback);
294
+ }
295
+ switch (protocol) {
296
+ // Connect using a HTTP CONNECT method
297
+ case 'http':
298
+ case 'https':
299
+ (0, http_proxy_client_js_1.default)(proxy.href, options.port, options.host, this.options.tls || {}, (err, socket) => {
300
+ if (err) {
301
+ return callback(err);
302
+ }
303
+ return callback(null, {
304
+ connection: socket
305
+ });
306
+ });
307
+ return;
308
+ case 'socks':
309
+ case 'socks5':
310
+ case 'socks4':
311
+ case 'socks4a': {
312
+ if (!this.meta.has('proxy_socks_module')) {
313
+ let err = new Error('Socks module not loaded');
314
+ err.code = errors.EPROXY;
315
+ return callback(err);
316
+ }
317
+ const connect = (ipaddress) => {
318
+ const proxyV2 = !!this.meta.get('proxy_socks_module').SocksClient;
319
+ const socksClient = proxyV2 ? this.meta.get('proxy_socks_module').SocksClient : this.meta.get('proxy_socks_module');
320
+ const proxyType = Number(proxy.protocol.replace(/\D/g, '')) || 5;
321
+ const connectionOpts = {
322
+ proxy: {
323
+ ipaddress,
324
+ port: Number(proxy.port),
325
+ type: proxyType
326
+ },
327
+ [proxyV2 ? 'destination' : 'target']: {
328
+ host: options.host,
329
+ port: options.port
330
+ },
331
+ command: 'connect'
332
+ };
333
+ if (proxy.username || proxy.password) {
334
+ const username = proxy.username || '';
335
+ const password = proxy.password || '';
336
+ if (proxyV2) {
337
+ connectionOpts.proxy.userId = username;
338
+ connectionOpts.proxy.password = password;
339
+ }
340
+ else if (proxyType === 4) {
341
+ connectionOpts.userid = username;
342
+ }
343
+ else {
344
+ connectionOpts.authentication = {
345
+ username,
346
+ password
347
+ };
348
+ }
349
+ }
350
+ socksClient.createConnection(connectionOpts, (err, info) => {
351
+ if (err) {
352
+ return callback(err);
353
+ }
354
+ return callback(null, {
355
+ connection: info.socket || info
356
+ });
357
+ });
358
+ };
359
+ if (node_net_1.default.isIP(proxy.hostname)) {
360
+ return connect(proxy.hostname);
361
+ }
362
+ return node_dns_1.default.resolve(proxy.hostname, (err, address) => {
363
+ if (err) {
364
+ return callback(err);
365
+ }
366
+ connect(Array.isArray(address) ? address[0] : address);
367
+ });
368
+ }
369
+ }
370
+ let err = new Error('Unknown proxy configuration');
371
+ err.code = errors.EPROXY;
372
+ callback(err);
373
+ };
374
+ }
375
+ /** @internal */
376
+ _convertDataImages(mail, callback) {
377
+ if ((!this.options.attachDataUrls && !mail.data.attachDataUrls) || !mail.data.html) {
378
+ return callback();
379
+ }
380
+ mail.resolveContent(mail.data, 'html', { disableFileAccess: mail.data.disableFileAccess, disableUrlAccess: mail.data.disableUrlAccess }, (err, html) => {
381
+ if (err) {
382
+ return callback(err);
383
+ }
384
+ let cidCounter = 0;
385
+ html = (html || '')
386
+ .toString()
387
+ .replace(/(<img\b[^<>]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi, (match, prefix, dataUri, mimeType) => {
388
+ const cid = node_crypto_1.default.randomBytes(10).toString('hex') + '@localhost';
389
+ if (!mail.data.attachments) {
390
+ mail.data.attachments = [];
391
+ }
392
+ if (!Array.isArray(mail.data.attachments)) {
393
+ mail.data.attachments = [].concat(mail.data.attachments || []);
394
+ }
395
+ mail.data.attachments.push({
396
+ path: dataUri,
397
+ cid,
398
+ filename: 'image-' + ++cidCounter + '.' + mimeTypes.detectExtension(mimeType)
399
+ });
400
+ return prefix + 'cid:' + cid;
401
+ });
402
+ mail.data.html = html;
403
+ callback();
404
+ });
405
+ }
406
+ set(key, value) {
407
+ return this.meta.set(key, value);
408
+ }
409
+ get(key) {
410
+ return this.meta.get(key);
411
+ }
412
+ }
413
+ exports.default = Mail;
414
+ module.exports = exports.default;
415
+ Object.defineProperty(module.exports, 'default', { value: exports.default, enumerable: false, writable: true, configurable: true });