@bumail/smtp 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{index-twt5myrr.js → index-byaw0g4k.js} +55 -4
- package/dist/chunks/{index-twt5myrr.js.map → index-byaw0g4k.js.map} +5 -4
- package/dist/client/dsn.d.ts +1 -1
- package/dist/client/dsn.d.ts.map +1 -1
- package/dist/client/index.js +24 -7
- package/dist/client/index.js.map +4 -4
- package/dist/client/transaction.d.ts.map +1 -1
- package/dist/index.js +18 -14
- package/dist/index.js.map +4 -4
- package/dist/protocol/orcpt.d.ts +27 -0
- package/dist/protocol/orcpt.d.ts.map +1 -0
- package/dist/server/dsn-params.d.ts +3 -2
- package/dist/server/dsn-params.d.ts.map +1 -1
- package/dist/server/transaction.d.ts.map +1 -1
- package/docs/guide.md +31 -9
- package/docs/roadmap.md +22 -3
- package/docs/troubleshooting.md +11 -4
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
decodePlain2,
|
|
7
7
|
decodeLoginStep2,
|
|
8
8
|
LineSplitter,
|
|
9
|
+
decodeUtf8Orcpt,
|
|
9
10
|
decodeXtext,
|
|
10
11
|
Outgoing
|
|
11
|
-
} from "./chunks/index-
|
|
12
|
+
} from "./chunks/index-byaw0g4k.js";
|
|
12
13
|
// src/protocol/command.ts
|
|
13
14
|
function parseCommand(line) {
|
|
14
15
|
const space = line.indexOf(" ");
|
|
@@ -317,15 +318,18 @@ function notify(value) {
|
|
|
317
318
|
}
|
|
318
319
|
return events;
|
|
319
320
|
}
|
|
320
|
-
function orcpt(value) {
|
|
321
|
+
function orcpt(value, smtputf8) {
|
|
322
|
+
const syntax = "Syntax: ORCPT=<addr-type>;<xtext>";
|
|
321
323
|
const semicolon = value.indexOf(";");
|
|
322
|
-
if (semicolon < 1 || value.length > 500)
|
|
323
|
-
return;
|
|
324
|
+
if (semicolon < 1 || new TextEncoder().encode(value).length > 500)
|
|
325
|
+
return syntax;
|
|
324
326
|
const type = value.slice(0, semicolon);
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
327
|
+
if (!/^[A-Za-z0-9-]+$/.test(type))
|
|
328
|
+
return syntax;
|
|
329
|
+
const wire = value.slice(semicolon + 1);
|
|
330
|
+
const kind = type.toLowerCase();
|
|
331
|
+
const address = kind === "utf-8" ? decodeUtf8Orcpt(wire, smtputf8) : decodeXtext(wire);
|
|
332
|
+
return address ? { type, address } : syntax;
|
|
329
333
|
}
|
|
330
334
|
function readMailDsn(into, key, value, repeated) {
|
|
331
335
|
if (repeated.includes(key))
|
|
@@ -343,7 +347,7 @@ function readMailDsn(into, key, value, repeated) {
|
|
|
343
347
|
into.envid = id;
|
|
344
348
|
return;
|
|
345
349
|
}
|
|
346
|
-
function readRcptDsn(into, key, value, repeated) {
|
|
350
|
+
function readRcptDsn(into, key, value, repeated, smtputf8 = false) {
|
|
347
351
|
if (repeated.includes(key))
|
|
348
352
|
return `${key} given twice`;
|
|
349
353
|
if (key === "NOTIFY") {
|
|
@@ -353,9 +357,9 @@ function readRcptDsn(into, key, value, repeated) {
|
|
|
353
357
|
into.notify = events;
|
|
354
358
|
return;
|
|
355
359
|
}
|
|
356
|
-
const original = orcpt(value);
|
|
357
|
-
if (
|
|
358
|
-
return
|
|
360
|
+
const original = orcpt(value, smtputf8);
|
|
361
|
+
if (typeof original === "string")
|
|
362
|
+
return original;
|
|
359
363
|
into.orcpt = original;
|
|
360
364
|
return;
|
|
361
365
|
}
|
|
@@ -443,7 +447,7 @@ async function rcpt(connection, argument) {
|
|
|
443
447
|
if (!RCPT_DSN.has(key)) {
|
|
444
448
|
return connection.fail(reply(555, "5.5.4", `${key} is not supported`));
|
|
445
449
|
}
|
|
446
|
-
const wrong = readRcptDsn(recipient, key, value, repeated);
|
|
450
|
+
const wrong = readRcptDsn(recipient, key, value, repeated, state.transaction.smtputf8);
|
|
447
451
|
if (wrong)
|
|
448
452
|
return connection.fail(reply(501, "5.5.4", wrong));
|
|
449
453
|
}
|
|
@@ -2053,5 +2057,5 @@ export {
|
|
|
2053
2057
|
reply
|
|
2054
2058
|
};
|
|
2055
2059
|
|
|
2056
|
-
//# debugId=
|
|
2060
|
+
//# debugId=4D2876010D33AF0464756E2164756E21
|
|
2057
2061
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"import { SmtpError } from '../errors';\nimport { type Reply, reply } from '../protocol/reply';\n\n/** The reply when a hook throws, times out or answers what is not a refusal. */\nexport const LOCAL_ERROR = reply(451, '4.3.0', 'Local error in processing');\n\nconst TIMED_OUT = Symbol('timed out');\n\n/** `promise`, or `TIMED_OUT` once `seconds` have passed. */\nexport async function within<T>(\n\tpromise: Promise<T>,\n\tseconds: number,\n): Promise<T | typeof TIMED_OUT> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst deadline = new Promise<typeof TIMED_OUT>((resolve) => {\n\t\ttimer = setTimeout(() => resolve(TIMED_OUT), seconds * 1000);\n\t});\n\ttry {\n\t\treturn await Promise.race([promise, deadline]);\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n\nexport function timedOut(value: unknown): value is typeof TIMED_OUT {\n\treturn value === TIMED_OUT;\n}\n\nexport function hookTimeout(name: string, seconds: number): SmtpError {\n\treturn new SmtpError(\n\t\t'HOOK_TIMEOUT',\n\t\t`${name} did not settle within hookTimeout (${seconds} s)`,\n\t);\n}\n\n/**\n * What a hook answered, as the reply to send: `undefined` to go on, or the\n * refusal. A reply under 400 is not a refusal — sending it would tell the\n * client yes while the server did not take the command — so it is reported\n * and answered as a local error.\n */\nexport function refusalOf(\n\tname: string,\n\tanswer: unknown,\n\treport: (error: unknown) => void,\n): Reply | undefined {\n\tif (answer === undefined) return undefined;\n\tconst code = (answer as Partial<Reply> | null)?.code;\n\tif (typeof code === 'number' && code >= 400 && code < 600) {\n\t\treturn answer as Reply;\n\t}\n\treport(\n\t\tnew SmtpError(\n\t\t\t'INVALID_HOOK_REPLY',\n\t\t\t`${name} answered ${JSON.stringify(answer)}, which is not a refusal: a hook refuses with a 4xx or 5xx reply, and accepts with undefined`,\n\t\t),\n\t);\n\treturn LOCAL_ERROR;\n}\n",
|
|
10
10
|
"import { reply } from '../protocol/reply';\nimport {\n\ttype Credentials,\n\tdecodeLoginStep,\n\tdecodePlain,\n} from '../protocol/sasl';\nimport type { Connection } from './connection';\n\n/** Failed AUTH attempts before the server hangs up. */\nconst MAX_AUTH_FAILURES = 3;\n\nasync function check(\n\tconnection: Connection,\n\tcredentials: Credentials | undefined,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tstate.waiting = 'command';\n\tstate.loginUser = undefined;\n\tif (credentials === undefined) {\n\t\treturn connection.fail(reply(501, '5.5.2', 'Cannot decode the response'));\n\t}\n\tif (\n\t\tcredentials.authorizationId !== undefined &&\n\t\tcredentials.authorizationId !== credentials.username\n\t) {\n\t\t// A session acts as the user it authenticated as, never as another.\n\t\treturn refuse(connection);\n\t}\n\tconst { authenticate } = settings.options;\n\tconst answer = await connection.check('authenticate', () =>\n\t\tauthenticate?.(credentials, connection.session),\n\t);\n\tif (answer.failed) {\n\t\t// RFC 4954 §6: a failure of the server's own, not of the credentials.\n\t\treturn connection.send(\n\t\t\treply(454, '4.7.0', 'Temporary authentication failure'),\n\t\t);\n\t}\n\tconst ok = answer.value === true;\n\tif (ok) {\n\t\tstate.user = credentials.username;\n\t\treturn connection.send(reply(235, '2.7.0', 'Authentication successful'));\n\t}\n\trefuse(connection);\n}\n\nfunction refuse(connection: Connection): void {\n\tconst { state, settings } = connection;\n\tstate.authFailures++;\n\tif (state.authFailures >= MAX_AUTH_FAILURES) {\n\t\tconst { hostname } = settings.options;\n\t\tconnection.close(\n\t\t\treply(\n\t\t\t\t421,\n\t\t\t\t'4.7.0',\n\t\t\t\t`${hostname} Too many failed authentications, closing`,\n\t\t\t),\n\t\t);\n\t\treturn;\n\t}\n\tconnection.fail(reply(535, '5.7.8', 'Authentication credentials invalid'));\n}\n\n/** `AUTH PLAIN [initial]` or `AUTH LOGIN [initial]` (RFC 4954), over TLS only. */\nexport async function authenticate(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (!settings.options.authenticate)\n\t\treturn connection.fail(reply(502, '5.5.1', 'AUTH not available'));\n\tif (!state.secure)\n\t\treturn connection.fail(\n\t\t\treply(\n\t\t\t\t538,\n\t\t\t\t'5.7.11',\n\t\t\t\t'Encryption required for requested authentication mechanism',\n\t\t\t),\n\t\t);\n\tif (state.helo === undefined || !state.esmtp)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.user !== undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Already authenticated'));\n\tif (state.transaction.from !== undefined)\n\t\treturn connection.fail(\n\t\t\treply(503, '5.5.1', 'AUTH not allowed during a transaction'),\n\t\t);\n\tconst [mechanism = '', initial, extra] = argument.split(' ');\n\tif (extra !== undefined)\n\t\treturn connection.fail(\n\t\t\treply(501, '5.5.4', 'Syntax: AUTH mechanism [initial-response]'),\n\t\t);\n\tswitch (mechanism.toUpperCase()) {\n\t\tcase 'PLAIN':\n\t\t\tif (initial === undefined) {\n\t\t\t\tstate.waiting = 'auth-plain';\n\t\t\t\treturn connection.send(reply(334, undefined, ''));\n\t\t\t}\n\t\t\treturn check(connection, decodePlain(initial === '=' ? '' : initial));\n\t\tcase 'LOGIN':\n\t\t\tif (initial === undefined) {\n\t\t\t\tstate.waiting = 'auth-login-user';\n\t\t\t\treturn connection.send(reply(334, undefined, 'VXNlcm5hbWU6'));\n\t\t\t}\n\t\t\treturn loginUser(connection, initial);\n\t\tdefault:\n\t\t\treturn connection.fail(\n\t\t\t\treply(504, '5.5.4', 'Unrecognized authentication type'),\n\t\t\t);\n\t}\n}\n\nfunction loginUser(\n\tconnection: Connection,\n\tresponse: string,\n): void | Promise<void> {\n\tconst user = decodeLoginStep(response);\n\tif (!user) return check(connection, undefined);\n\tconnection.state.loginUser = user;\n\tconnection.state.waiting = 'auth-login-password';\n\tconnection.send(reply(334, undefined, 'UGFzc3dvcmQ6'));\n}\n\n/** The client's line after a 334 challenge. */\nexport async function continueAuth(\n\tconnection: Connection,\n\tline: string,\n): Promise<void> {\n\tconst { state } = connection;\n\tif (line === '*') {\n\t\tstate.waiting = 'command';\n\t\tstate.loginUser = undefined;\n\t\treturn connection.fail(reply(501, '5.0.0', 'Authentication cancelled'));\n\t}\n\tswitch (state.waiting) {\n\t\tcase 'auth-plain':\n\t\t\treturn check(connection, decodePlain(line));\n\t\tcase 'auth-login-user':\n\t\t\treturn loginUser(connection, line);\n\t\tdefault: {\n\t\t\tconst password = decodeLoginStep(line);\n\t\t\tconst username = state.loginUser ?? '';\n\t\t\treturn check(\n\t\t\t\tconnection,\n\t\t\t\tpassword ? { mechanism: 'LOGIN', username, password } : undefined,\n\t\t\t);\n\t\t}\n\t}\n}\n",
|
|
11
11
|
"import type { Envelope, EnvelopeRecipient } from './options';\n\n/** A mail transaction in progress (RFC 5321 §3.3). */\nexport interface Transaction {\n\tfrom?: string;\n\tto: string[];\n\trecipients: EnvelopeRecipient[];\n\tret?: Envelope['ret'];\n\tenvid?: string;\n\tsmtputf8: boolean;\n\tbody: Envelope['body'];\n}\n\n/** What the next line from the client is. */\nexport type Waiting =\n\t| 'command'\n\t| 'data'\n\t| 'auth-plain'\n\t| 'auth-login-user'\n\t| 'auth-login-password';\n\n/** The state of a session the commands change. */\nexport interface State {\n\thelo?: string | undefined;\n\tesmtp: boolean;\n\tuser?: string | undefined;\n\tsecure: boolean;\n\ttransaction: Transaction;\n\twaiting: Waiting;\n\tloginUser?: string | undefined;\n\terrors: number;\n\tauthFailures: number;\n}\n\nexport const emptyTransaction = (): Transaction => ({\n\tto: [],\n\trecipients: [],\n\tsmtputf8: false,\n\tbody: '7BIT',\n});\n",
|
|
12
|
-
"// The value rules repeat packages/jmap/src/submission/dsn.ts, packages/smtp/src/client/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy reads the wire.\nimport { decodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\n/** The DSN parameters (RFC 3461 §4) MAIL FROM takes. */\nexport const MAIL_DSN = new Set(['RET', 'ENVID']);\n/** The DSN parameters (RFC 3461 §4) RCPT TO takes. */\nexport const RCPT_DSN = new Set(['NOTIFY', 'ORCPT']);\n\nconst EVENTS: readonly DsnNotify[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/**\n * `ENVID=` is at most 100 characters as it is sent, xtext (RFC 3461 §4.4: \"The\n * ENVID parameter MAY be up to 100 characters in length\", §5.4: a server MUST\n * accept 100), and printable ASCII once decoded.\n */\nfunction envid(value: string): string | undefined {\n\tconst text = value.length <= 100 ? decodeXtext(value) : undefined;\n\treturn text !== undefined && /^[ -~]+$/.test(text) ? text : undefined;\n}\n\n/** `NOTIFY=NEVER` or a comma list of events, with no duplicate (RFC 3461 §4.1). */\nfunction notify(value: string): 'NEVER' | DsnNotify[] | undefined {\n\tconst items = value.toUpperCase().split(',');\n\tif (items.length === 1 && items[0] === 'NEVER') return 'NEVER';\n\tconst events: DsnNotify[] = [];\n\tfor (const item of items) {\n\t\tconst event = EVENTS.find((candidate) => candidate === item);\n\t\tif (!event || events.includes(event)) return undefined;\n\t\tevents.push(event);\n\t}\n\treturn events;\n}\n\n/**\n * `ORCPT=<addr-type>;<
|
|
13
|
-
"import { parsePathCommand } from '../protocol/command';\nimport { reply } from '../protocol/reply';\nimport type { Connection } from './connection';\nimport { MAIL_DSN, RCPT_DSN, readMailDsn, readRcptDsn } from './dsn-params';\nimport { LOCAL_ERROR } from './guard';\nimport type { EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\nfunction nonAscii(text: string): boolean {\n\tfor (let i = 0; i < text.length; i++)\n\t\tif (text.charCodeAt(i) > 0x7f) return true;\n\treturn false;\n}\n\n/** `MAIL FROM:<path> [SIZE=] [BODY=] [SMTPUTF8] [AUTH=] [RET=] [ENVID=]` (RFC 5321 §4.1.1.2, RFC 3461 §4.3, §4.4). */\nexport async function mail(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.helo === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.transaction.from !== undefined) {\n\t\treturn connection.fail(reply(503, '5.5.1', 'Nested MAIL command'));\n\t}\n\tif (settings.mode === 'submission' && state.user === undefined) {\n\t\treturn connection.fail(reply(530, '5.7.0', 'Authentication required'));\n\t}\n\tconst command = parsePathCommand(argument, 'FROM');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: MAIL FROM:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\tconst dsn: Pick<Transaction, 'ret' | 'envid'> = {};\n\tlet body: '7BIT' | '8BITMIME' = '7BIT';\n\tlet smtputf8 = false;\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (key === 'SIZE') {\n\t\t\tif (!/^\\d+$/.test(value))\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: SIZE=<bytes>'));\n\t\t\tif (Number(value) > settings.maxMessageSize) {\n\t\t\t\treturn connection.fail(\n\t\t\t\t\treply(552, '5.3.4', 'Message too big for system'),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (key === 'BODY') {\n\t\t\tconst kind = value.toUpperCase();\n\t\t\tif (kind !== '7BIT' && kind !== '8BITMIME') {\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'BODY is 7BIT or 8BITMIME'));\n\t\t\t}\n\t\t\tbody = kind;\n\t\t} else if (key === 'SMTPUTF8' && value === '') {\n\t\t\tsmtputf8 = true;\n\t\t} else if (key === 'AUTH') {\n\t\t\t// RFC 4954 §5: the original submitter; taken and not passed on.\n\t\t} else if (MAIL_DSN.has(key)) {\n\t\t\tconst wrong = readMailDsn(dsn, key, value, repeated);\n\t\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t\t} else {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t}\n\tif (!smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onMailFrom\n\t\t? await connection.hook('onMailFrom', () =>\n\t\t\t\toptions.onMailFrom?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction = {\n\t\tfrom: path.address,\n\t\tto: [],\n\t\trecipients: [],\n\t\tsmtputf8,\n\t\tbody,\n\t\t...dsn,\n\t};\n\tconnection.send(reply(250, '2.1.0', 'OK'));\n}\n\n/** `RCPT TO:<path> [NOTIFY=] [ORCPT=]` (RFC 5321 §4.1.1.3, RFC 3461 §4.1, §4.2), where relaying is refused without AUTH. */\nexport async function rcpt(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.transaction.from === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send MAIL first'));\n\tconst command = parsePathCommand(argument, 'TO');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: RCPT TO:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\t// RFC 3461 §4.1, §4.2: NOTIFY and ORCPT.\n\tconst recipient: {\n\t\t-readonly [K in keyof EnvelopeRecipient]: EnvelopeRecipient[K];\n\t} = {\n\t\taddress: path.address,\n\t};\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (!RCPT_DSN.has(key)) {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t\tconst wrong = readRcptDsn(
|
|
12
|
+
"// The value rules repeat packages/jmap/src/submission/dsn.ts, packages/smtp/src/client/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy reads the wire.\nimport { decodeUtf8Orcpt } from '../protocol/orcpt';\nimport { decodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\n/** The DSN parameters (RFC 3461 §4) MAIL FROM takes. */\nexport const MAIL_DSN = new Set(['RET', 'ENVID']);\n/** The DSN parameters (RFC 3461 §4) RCPT TO takes. */\nexport const RCPT_DSN = new Set(['NOTIFY', 'ORCPT']);\n\nconst EVENTS: readonly DsnNotify[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/**\n * `ENVID=` is at most 100 characters as it is sent, xtext (RFC 3461 §4.4: \"The\n * ENVID parameter MAY be up to 100 characters in length\", §5.4: a server MUST\n * accept 100), and printable ASCII once decoded.\n */\nfunction envid(value: string): string | undefined {\n\tconst text = value.length <= 100 ? decodeXtext(value) : undefined;\n\treturn text !== undefined && /^[ -~]+$/.test(text) ? text : undefined;\n}\n\n/** `NOTIFY=NEVER` or a comma list of events, with no duplicate (RFC 3461 §4.1). */\nfunction notify(value: string): 'NEVER' | DsnNotify[] | undefined {\n\tconst items = value.toUpperCase().split(',');\n\tif (items.length === 1 && items[0] === 'NEVER') return 'NEVER';\n\tconst events: DsnNotify[] = [];\n\tfor (const item of items) {\n\t\tconst event = EVENTS.find((candidate) => candidate === item);\n\t\tif (!event || events.includes(event)) return undefined;\n\t\tevents.push(event);\n\t}\n\treturn events;\n}\n\n/**\n * `ORCPT=<addr-type>;<address>` (RFC 3461 §4.2), at most 500 characters as it\n * is sent (octets, which only differ under SMTPUTF8): \"The entire ORCPT\n * parameter MAY be up to 500 characters in length\". `utf-8` is RFC 6533's\n * `utf-8-addr-xtext`, or with SMTPUTF8 `utf-8-addr-unitext`; every other type\n * is xtext (RFC 3461 §5.1(b): an unknown type is passed on). The type stays\n * as sent. The text of the `501` when it is wrong.\n */\nfunction orcpt(\n\tvalue: string,\n\tsmtputf8: boolean,\n): { type: string; address: string } | string {\n\tconst syntax = 'Syntax: ORCPT=<addr-type>;<xtext>';\n\tconst semicolon = value.indexOf(';');\n\tif (semicolon < 1 || new TextEncoder().encode(value).length > 500)\n\t\treturn syntax;\n\tconst type = value.slice(0, semicolon);\n\tif (!/^[A-Za-z0-9-]+$/.test(type)) return syntax;\n\tconst wire = value.slice(semicolon + 1);\n\tconst kind = type.toLowerCase();\n\tconst address =\n\t\tkind === 'utf-8' ? decodeUtf8Orcpt(wire, smtputf8) : decodeXtext(wire);\n\treturn address ? { type, address } : syntax;\n}\n\n/**\n * Reads one DSN parameter of MAIL FROM into the transaction under way.\n * The text of the `501` to answer when the value is wrong, else `undefined`.\n */\nexport function readMailDsn(\n\tinto: Pick<Transaction, 'ret' | 'envid'>,\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'RET') {\n\t\tconst ret = value.toUpperCase();\n\t\tif (ret !== 'FULL' && ret !== 'HDRS') return 'Syntax: RET=FULL or RET=HDRS';\n\t\tinto.ret = ret;\n\t\treturn undefined;\n\t}\n\tconst id = envid(value);\n\tif (id === undefined) return 'Syntax: ENVID=<xtext, 1 to 100 characters>';\n\tinto.envid = id;\n\treturn undefined;\n}\n\n/**\n * Reads one DSN parameter of RCPT TO into `into`; `smtputf8` is whether the\n * transaction uses SMTPUTF8 (the form of a `utf-8` ORCPT). The text of the `501` to\n * answer when the value is wrong, else `undefined`.\n */\nexport function readRcptDsn(\n\tinto: {\n\t\tnotify?: 'NEVER' | readonly DsnNotify[];\n\t\torcpt?: EnvelopeRecipient['orcpt'];\n\t},\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n\tsmtputf8 = false,\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'NOTIFY') {\n\t\tconst events = notify(value);\n\t\tif (!events) return 'Syntax: NOTIFY=NEVER or NOTIFY=SUCCESS,FAILURE,DELAY';\n\t\tinto.notify = events;\n\t\treturn undefined;\n\t}\n\tconst original = orcpt(value, smtputf8);\n\tif (typeof original === 'string') return original;\n\tinto.orcpt = original;\n\treturn undefined;\n}\n",
|
|
13
|
+
"import { parsePathCommand } from '../protocol/command';\nimport { reply } from '../protocol/reply';\nimport type { Connection } from './connection';\nimport { MAIL_DSN, RCPT_DSN, readMailDsn, readRcptDsn } from './dsn-params';\nimport { LOCAL_ERROR } from './guard';\nimport type { EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\nfunction nonAscii(text: string): boolean {\n\tfor (let i = 0; i < text.length; i++)\n\t\tif (text.charCodeAt(i) > 0x7f) return true;\n\treturn false;\n}\n\n/** `MAIL FROM:<path> [SIZE=] [BODY=] [SMTPUTF8] [AUTH=] [RET=] [ENVID=]` (RFC 5321 §4.1.1.2, RFC 3461 §4.3, §4.4). */\nexport async function mail(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.helo === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.transaction.from !== undefined) {\n\t\treturn connection.fail(reply(503, '5.5.1', 'Nested MAIL command'));\n\t}\n\tif (settings.mode === 'submission' && state.user === undefined) {\n\t\treturn connection.fail(reply(530, '5.7.0', 'Authentication required'));\n\t}\n\tconst command = parsePathCommand(argument, 'FROM');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: MAIL FROM:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\tconst dsn: Pick<Transaction, 'ret' | 'envid'> = {};\n\tlet body: '7BIT' | '8BITMIME' = '7BIT';\n\tlet smtputf8 = false;\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (key === 'SIZE') {\n\t\t\tif (!/^\\d+$/.test(value))\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: SIZE=<bytes>'));\n\t\t\tif (Number(value) > settings.maxMessageSize) {\n\t\t\t\treturn connection.fail(\n\t\t\t\t\treply(552, '5.3.4', 'Message too big for system'),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (key === 'BODY') {\n\t\t\tconst kind = value.toUpperCase();\n\t\t\tif (kind !== '7BIT' && kind !== '8BITMIME') {\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'BODY is 7BIT or 8BITMIME'));\n\t\t\t}\n\t\t\tbody = kind;\n\t\t} else if (key === 'SMTPUTF8' && value === '') {\n\t\t\tsmtputf8 = true;\n\t\t} else if (key === 'AUTH') {\n\t\t\t// RFC 4954 §5: the original submitter; taken and not passed on.\n\t\t} else if (MAIL_DSN.has(key)) {\n\t\t\tconst wrong = readMailDsn(dsn, key, value, repeated);\n\t\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t\t} else {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t}\n\tif (!smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onMailFrom\n\t\t? await connection.hook('onMailFrom', () =>\n\t\t\t\toptions.onMailFrom?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction = {\n\t\tfrom: path.address,\n\t\tto: [],\n\t\trecipients: [],\n\t\tsmtputf8,\n\t\tbody,\n\t\t...dsn,\n\t};\n\tconnection.send(reply(250, '2.1.0', 'OK'));\n}\n\n/** `RCPT TO:<path> [NOTIFY=] [ORCPT=]` (RFC 5321 §4.1.1.3, RFC 3461 §4.1, §4.2), where relaying is refused without AUTH. */\nexport async function rcpt(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.transaction.from === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send MAIL first'));\n\tconst command = parsePathCommand(argument, 'TO');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: RCPT TO:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\t// RFC 3461 §4.1, §4.2: NOTIFY and ORCPT.\n\tconst recipient: {\n\t\t-readonly [K in keyof EnvelopeRecipient]: EnvelopeRecipient[K];\n\t} = {\n\t\taddress: path.address,\n\t};\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (!RCPT_DSN.has(key)) {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t\tconst wrong = readRcptDsn(\n\t\t\trecipient,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\trepeated,\n\t\t\tstate.transaction.smtputf8,\n\t\t);\n\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t}\n\tif (!state.transaction.smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tif (state.transaction.to.length >= settings.maxRecipients) {\n\t\treturn connection.send(reply(452, '4.5.3', 'Too many recipients'));\n\t}\n\t// Never an open relay: a domain this server does not host takes AUTH.\n\t// `<postmaster>` with no domain is this server's own (RFC 5321 §4.5.1).\n\tif (state.user === undefined && path.postmaster !== true) {\n\t\tconst local = await connection.check('localDomains', () =>\n\t\t\tsettings.isLocal(path.domain),\n\t\t);\n\t\tif (local.failed) return connection.send(LOCAL_ERROR);\n\t\tif (local.value !== true) {\n\t\t\treturn connection.fail(reply(554, '5.7.1', 'Relay access denied'));\n\t\t}\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onRcptTo\n\t\t? await connection.hook('onRcptTo', () =>\n\t\t\t\toptions.onRcptTo?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction.to.push(path.address);\n\tstate.transaction.recipients.push(recipient);\n\tconnection.send(reply(250, '2.1.5', 'OK'));\n}\n",
|
|
14
14
|
"import { parseCommand } from '../protocol/command';\nimport { isHelloName } from '../protocol/path';\nimport { reply } from '../protocol/reply';\nimport { authenticate, continueAuth } from './auth';\nimport type { Connection } from './connection';\nimport { emptyTransaction } from './state';\nimport { mail, rcpt } from './transaction';\n\nfunction ehloLines(connection: Connection): string[] {\n\tconst { settings, state } = connection;\n\tconst lines = [\n\t\t`${settings.options.hostname} greets ${state.helo}`,\n\t\t'PIPELINING',\n\t\t`SIZE ${settings.maxMessageSize}`,\n\t\t'8BITMIME',\n\t\t'SMTPUTF8',\n\t\t'DSN',\n\t\t'ENHANCEDSTATUSCODES',\n\t];\n\tif (settings.options.tls && !state.secure) lines.push('STARTTLS');\n\tif (\n\t\tsettings.options.authenticate &&\n\t\tstate.secure &&\n\t\tstate.user === undefined\n\t) {\n\t\tlines.push('AUTH PLAIN LOGIN');\n\t}\n\treturn lines;\n}\n\nasync function hello(\n\tconnection: Connection,\n\targument: string,\n\tesmtp: boolean,\n): Promise<void> {\n\tif (!isHelloName(argument)) {\n\t\tconnection.fail(\n\t\t\treply(501, '5.5.4', `Syntax: ${esmtp ? 'EHLO' : 'HELO'} hostname`),\n\t\t);\n\t\treturn;\n\t}\n\tconst { state } = connection;\n\tstate.helo = argument;\n\tstate.esmtp = esmtp;\n\t// RFC 5321 §4.1.4: EHLO or HELO resets a transaction in progress.\n\tstate.transaction = emptyTransaction();\n\tconnection.send(\n\t\tesmtp\n\t\t\t? reply(250, undefined, ehloLines(connection))\n\t\t\t: reply(\n\t\t\t\t\t250,\n\t\t\t\t\tundefined,\n\t\t\t\t\t`${connection.settings.options.hostname} greets ${argument}`,\n\t\t\t\t),\n\t);\n}\n\nfunction data(connection: Connection, argument: string): void {\n\tconst { state } = connection;\n\tconst refusal =\n\t\targument !== ''\n\t\t\t? reply(501, '5.5.4', 'Syntax: DATA')\n\t\t\t: state.transaction.from === undefined\n\t\t\t\t? reply(503, '5.5.1', 'Send MAIL first')\n\t\t\t\t: state.transaction.to.length === 0\n\t\t\t\t\t? reply(554, '5.5.1', 'No valid recipients')\n\t\t\t\t\t: undefined;\n\tif (refusal) {\n\t\tconnection.fail(refusal);\n\t\t// What the client pipelined after a refused DATA is message content,\n\t\t// not commands: running it would let a message smuggle commands in.\n\t\tconnection.input.drop();\n\t\treturn;\n\t}\n\tconnection.send(reply(354, undefined, 'End data with <CR><LF>.<CR><LF>'));\n\tconnection.input.beginData();\n}\n\nasync function startTls(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tconst refusal = !settings.options.tls\n\t\t? reply(454, '4.7.0', 'TLS not available')\n\t\t: state.secure\n\t\t\t? reply(503, '5.5.1', 'TLS already active')\n\t\t\t: argument !== ''\n\t\t\t\t? reply(501, '5.5.4', 'Syntax: STARTTLS')\n\t\t\t\t: undefined;\n\tif (refusal) {\n\t\tconnection.fail(refusal);\n\t\treturn;\n\t}\n\tconnection.send(reply(220, '2.0.0', 'Ready to start TLS'));\n\tconnection.input.ignore();\n\t// The 220 must reach the client in clear before the handshake starts.\n\tawait connection.transport.drained();\n\tif (connection.closed) return;\n\tconnection.transport.startTls();\n\tconnection.input.accept();\n\t// RFC 3207 §4.2: everything learnt before TLS is forgotten.\n\tstate.secure = true;\n\tstate.helo = undefined;\n\tstate.esmtp = false;\n\tstate.transaction = emptyTransaction();\n}\n\n/** Runs one command line, or the client's answer to an AUTH challenge. */\nexport async function runCommand(\n\tconnection: Connection,\n\tline: string,\n): Promise<void> {\n\tconst { state } = connection;\n\tif (state.waiting !== 'command') return continueAuth(connection, line);\n\tconst { verb, argument } = parseCommand(line);\n\tswitch (verb) {\n\t\tcase 'EHLO':\n\t\t\treturn hello(connection, argument, true);\n\t\tcase 'HELO':\n\t\t\treturn hello(connection, argument, false);\n\t\tcase 'MAIL':\n\t\t\treturn mail(connection, argument);\n\t\tcase 'RCPT':\n\t\t\treturn rcpt(connection, argument);\n\t\tcase 'DATA':\n\t\t\treturn data(connection, argument);\n\t\tcase 'RSET':\n\t\t\tstate.transaction = emptyTransaction();\n\t\t\treturn connection.send(reply(250, '2.0.0', 'OK'));\n\t\tcase 'NOOP':\n\t\t\treturn connection.send(reply(250, '2.0.0', 'OK'));\n\t\tcase 'VRFY':\n\t\t\treturn connection.send(\n\t\t\t\treply(\n\t\t\t\t\t252,\n\t\t\t\t\t'2.5.0',\n\t\t\t\t\t'Cannot VRFY user; send the message and it will be tried',\n\t\t\t\t),\n\t\t\t);\n\t\tcase 'HELP':\n\t\t\treturn connection.send(reply(214, '2.0.0', 'See RFC 5321'));\n\t\tcase 'QUIT':\n\t\t\treturn connection.quit(\n\t\t\t\treply(\n\t\t\t\t\t221,\n\t\t\t\t\t'2.0.0',\n\t\t\t\t\t`${connection.settings.options.hostname} closing connection`,\n\t\t\t\t),\n\t\t\t);\n\t\tcase 'STARTTLS':\n\t\t\treturn startTls(connection, argument);\n\t\tcase 'AUTH':\n\t\t\treturn authenticate(connection, argument);\n\t\tdefault:\n\t\t\treturn connection.fail(reply(500, '5.5.2', 'Command unrecognized'));\n\t}\n}\n",
|
|
15
15
|
"import type { ReceivedMessage } from './options';\nimport type { Transaction } from './state';\n\n/** The envelope of a message as `onData` is told it, from the transaction that ended in DATA. */\nexport function envelopeOf(\n\ttransaction: Transaction,\n): ReceivedMessage['envelope'] {\n\treturn {\n\t\tfrom: transaction.from ?? '',\n\t\tto: [...transaction.to],\n\t\tsmtputf8: transaction.smtputf8,\n\t\tbody: transaction.body,\n\t\t...(transaction.ret !== undefined && { ret: transaction.ret }),\n\t\t...(transaction.envid !== undefined && { envid: transaction.envid }),\n\t\trecipients: [...transaction.recipients],\n\t};\n}\n",
|
|
16
16
|
"import { isIPv6 } from 'node:net';\nimport type { Connection } from './connection';\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n\t'Jan',\n\t'Feb',\n\t'Mar',\n\t'Apr',\n\t'May',\n\t'Jun',\n\t'Jul',\n\t'Aug',\n\t'Sep',\n\t'Oct',\n\t'Nov',\n\t'Dec',\n];\n\nconst two = (n: number) => String(n).padStart(2, '0');\n\n/** An RFC 5322 §3.3 date-time, in UTC. */\nexport function dateTime(date: Date): string {\n\treturn `${DAYS[date.getUTCDay()]}, ${date.getUTCDate()} ${MONTHS[date.getUTCMonth()]} ${date.getUTCFullYear()} ${two(date.getUTCHours())}:${two(date.getUTCMinutes())}:${two(date.getUTCSeconds())} +0000`;\n}\n\n/** RFC 3848: how the message came — SMTP, ESMTP, then S for TLS and A for AUTH. */\nexport function protocolOf(\n\tesmtp: boolean,\n\tsecure: boolean,\n\tauthenticated: boolean,\n): string {\n\tif (!esmtp) return 'SMTP';\n\treturn `ESMTP${secure ? 'S' : ''}${authenticated ? 'A' : ''}`;\n}\n\n/** The client's address as a domain literal (RFC 5321 §4.1.3): an IPv6 address is tagged `IPv6:`. */\nexport function addressLiteral(address: string): string {\n\t// A zone (`fe80::1%en0`) names an interface of this host: not part of the literal.\n\tconst bare = address.replace(/%.*$/, '');\n\treturn isIPv6(bare) ? `IPv6:${bare}` : printable(address);\n}\n\n/** Keeps a client-given name printable in a header: anything else becomes `?`. */\nfunction printable(text: string): string {\n\tlet out = '';\n\tfor (const char of text) {\n\t\tconst code = char.charCodeAt(0);\n\t\tout += code > 0x20 && code < 0x7f ? char : '?';\n\t}\n\treturn out;\n}\n\n/** Whether an address can go into the `for` clause as it is: printable, and no `;` to end the clause early. */\nfunction plain(address: string): boolean {\n\treturn printable(address) === address && !address.includes(';');\n}\n\n/**\n * The Received field the server puts on top (RFC 5321 §4.4): who sent the\n * message, from where, how, to whom when there is one recipient, and when.\n */\nexport function receivedField(\n\tconnection: Connection,\n\trecipients: readonly string[],\n\tid: string,\n\tnow = new Date(),\n): string {\n\tconst { state, transport, settings } = connection;\n\tconst lines = [\n\t\t`Received: from ${printable(state.helo ?? 'unknown')} ([${addressLiteral(transport.remoteAddress)}])`,\n\t\t`\\tby ${settings.options.hostname} with ${protocolOf(state.esmtp, state.secure, state.user !== undefined)} id ${id}`,\n\t];\n\tconst [recipient] = recipients;\n\tif (recipients.length === 1 && recipient !== undefined && plain(recipient)) {\n\t\tlines.push(`\\tfor <${recipient}>`);\n\t}\n\tlines[lines.length - 1] += `; ${dateTime(now)}`;\n\treturn `${lines.join('\\r\\n')}\\r\\n`;\n}\n",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"/**\n * The connections a server holds, and how many each client holds, by\n * `clientKey`. `release` is idempotent: every close handler calls it.\n */\nexport class Slots<T> {\n\treadonly #open = new Map<T, string | undefined>();\n\treadonly #perClient = new Map<string, number>();\n\n\tget size(): number {\n\t\treturn this.#open.size;\n\t}\n\n\t/** How many connections the client `key` holds. */\n\tof(key: string | undefined): number {\n\t\treturn key === undefined ? 0 : (this.#perClient.get(key) ?? 0);\n\t}\n\n\ttake(connection: T, key: string | undefined): void {\n\t\tthis.#open.set(connection, key);\n\t\tif (key !== undefined) this.#perClient.set(key, this.of(key) + 1);\n\t}\n\n\trelease(connection: T): void {\n\t\tif (!this.#open.has(connection)) return;\n\t\tconst key = this.#open.get(connection);\n\t\tthis.#open.delete(connection);\n\t\tif (key === undefined) return;\n\t\tconst left = this.of(key) - 1;\n\t\tif (left > 0) this.#perClient.set(key, left);\n\t\telse this.#perClient.delete(key);\n\t}\n\n\tconnections(): T[] {\n\t\treturn [...this.#open.keys()];\n\t}\n}\n",
|
|
32
32
|
"import type { Socket, TCPSocketListener } from 'bun';\nimport { SmtpError } from '../errors';\nimport {\n\ttype Listening,\n\tlistenerHandlers,\n\tupgradingHandlers,\n} from './admission';\nimport type { Connection } from './connection';\nimport { handlers, type SocketState } from './listener';\nimport type { SmtpServerOptions, TlsOptions } from './options';\nimport { settingsOf } from './settings';\nimport { Slots } from './slots';\n\n/** A key or certificate `listen` or `setTls` cannot use: `INVALID_OPTION`, the reason as its `cause`. */\nconst invalidTls = (message: string, cause: unknown) =>\n\tnew SmtpError('INVALID_OPTION', message, { cause });\n\n/** What a `listen` that a `stop()` came before says. */\nconst STOPPED = 'listen(): stop() was called before the server bound its port';\n\n/** Binds the port, once `listen`'s guard passed. */\nasync function bind(\n\tlistening: Omit<Listening, 'proxied'>,\n\tport: number,\n\thostname: string,\n\tstopped: () => boolean,\n): Promise<TCPSocketListener<SocketState>> {\n\t// Implicit TLS: the key and certificate are checked first, so one\n\t// that cannot be used fails here alike, with a proxy or without.\n\tconst { tls } = listening.settings;\n\tif (listening.secure && tls) await tls.load(invalidTls, 'listen()');\n\t// `stop()` came while the key was being read: nothing is bound.\n\tif (stopped()) {\n\t\tthrow new SmtpError('STOPPED', STOPPED);\n\t}\n\t// Behind a proxy: a clear listener, TLS after the header. Without\n\t// one, the listener is clear too, and every socket upgrades at once:\n\t// the pair `setTls` replaced is read per connection, which a native\n\t// TLS listener, bound to one context, cannot do.\n\tconst proxied =\n\t\tlistening.secure && listening.settings.trusts ? tls : undefined;\n\tconst full = {\n\t\t...handlers(listening.settings),\n\t\t...listenerHandlers({\n\t\t\t...listening,\n\t\t\t...(proxied ? { proxied } : {}),\n\t\t}),\n\t};\n\treturn Bun.listen<SocketState>({\n\t\thostname,\n\t\tport,\n\t\tsocket:\n\t\t\tlistening.secure && !proxied\n\t\t\t\t? upgradingHandlers(full, listening.settings)\n\t\t\t\t: full,\n\t});\n}\n\nexport interface SmtpServer {\n\t/** Starts listening; resolves once the port is bound. Once only: a second call throws. */\n\tlisten(options: {\n\t\tport: number;\n\t\thostname?: string;\n\t}): Promise<{ port: number; hostname: string }>;\n\t/**\n\t * Uses a renewed key and certificate from the next STARTTLS upgrade or\n\t * implicit TLS connection on; the sessions open keep the TLS they have.\n\t * The pair is read and checked first: one that cannot be used throws\n\t * `INVALID_OPTION` and leaves the one in use. Needs a server made with\n\t * `tls`.\n\t */\n\tsetTls(tls: TlsOptions): Promise<void>;\n\t/** Stops listening; `closeConnections` hangs up on every client too. */\n\tstop(closeConnections?: boolean): void;\n\t/** Open connections. */\n\treadonly connections: number;\n}\n\n/**\n * An SMTP server (RFC 5321) on `Bun.listen`: EHLO with PIPELINING, SIZE,\n * 8BITMIME, SMTPUTF8 and ENHANCEDSTATUSCODES; STARTTLS (RFC 3207) or\n * implicit TLS (RFC 8314); AUTH PLAIN and LOGIN over TLS only (RFC 4954);\n * policy through hooks. It never relays without AUTH: a recipient outside\n * `localDomains` is refused to an unauthenticated session, whatever the\n * hooks say.\n */\nexport function createSmtpServer(options: SmtpServerOptions): SmtpServer {\n\tconst settings = settingsOf(options);\n\tlet listener: TCPSocketListener<SocketState> | undefined;\n\tconst slots = new Slots<Connection>();\n\t/** Implicit TLS sockets still in their handshake, for `stop(true)`. */\n\tconst handshaking = new Set<Socket<SocketState>>();\n\tconst secure = options.implicitTls === true;\n\t/** `listen` has not resolved yet: it may be reading the TLS material, before it binds. */\n\tlet starting = false;\n\t/** `stop()` was called while `starting`: `listen` leaves nothing bound. */\n\tlet stopRequested = false;\n\treturn {\n\t\tget connections() {\n\t\t\treturn slots.size;\n\t\t},\n\t\tasync setTls(tls) {\n\t\t\tif (!settings.tls) {\n\t\t\t\tthrow new SmtpError(\n\t\t\t\t\t'INVALID_OPTION',\n\t\t\t\t\t'setTls(): the server was made without tls, so it has none to replace',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait settings.tls.replace(tls, invalidTls, 'setTls()');\n\t\t},\n\t\tasync listen({ port, hostname = '0.0.0.0' }) {\n\t\t\tif (listener || starting) {\n\t\t\t\tthrow new SmtpError(\n\t\t\t\t\t'ALREADY_LISTENING',\n\t\t\t\t\tlistener\n\t\t\t\t\t\t? `listen(): the server is already listening on ${listener.hostname}:${listener.port}`\n\t\t\t\t\t\t: 'listen(): the server is already starting to listen',\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Set before the first await: a second call meanwhile throws, never binds.\n\t\t\tstarting = true;\n\t\t\tstopRequested = false;\n\t\t\ttry {\n\t\t\t\tconst bound = await bind(\n\t\t\t\t\t{ settings, slots, handshaking, secure },\n\t\t\t\t\tport,\n\t\t\t\t\thostname,\n\t\t\t\t\t() => stopRequested,\n\t\t\t\t);\n\t\t\t\t// `stop()` came before `listen` resolved: nothing is left listening.\n\t\t\t\tif (stopRequested) {\n\t\t\t\t\tbound.stop(true);\n\t\t\t\t\tthrow new SmtpError('STOPPED', STOPPED);\n\t\t\t\t}\n\t\t\t\tlistener = bound;\n\t\t\t\treturn { port: listener.port, hostname: listener.hostname };\n\t\t\t} finally {\n\t\t\t\tstarting = false;\n\t\t\t}\n\t\t},\n\t\tstop(closeConnections = false) {\n\t\t\tif (starting) stopRequested = true;\n\t\t\tlistener?.stop(closeConnections);\n\t\t\tlistener = undefined;\n\t\t\tif (!closeConnections) return;\n\t\t\t// Bun's `stop(true)` closes the sockets the listener holds, and a\n\t\t\t// socket STARTTLS moved to TLS is no longer one of them: hang up on\n\t\t\t// every connection here, as a timeout does. A socket still in its\n\t\t\t// handshake has no TLS to say 421 on: it is reset.\n\t\t\tconst stuck = new Set<Connection | undefined>();\n\t\t\tfor (const socket of [...handshaking]) {\n\t\t\t\tstuck.add(socket.data?.connection);\n\t\t\t\thandshaking.delete(socket);\n\t\t\t\tsocket.terminate();\n\t\t\t}\n\t\t\tfor (const connection of slots.connections()) {\n\t\t\t\tif (!stuck.has(connection)) connection.close();\n\t\t\t}\n\t\t},\n\t};\n}\n"
|
|
33
33
|
],
|
|
34
|
-
"mappings": "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",
|
|
35
|
-
"debugId": "
|
|
34
|
+
"mappings": "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",
|
|
35
|
+
"debugId": "4D2876010D33AF0464756E2164756E21",
|
|
36
36
|
"names": []
|
|
37
37
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The length of an address in its `utf-8-addr-unitext` form, the shortest
|
|
3
|
+
* (raw UTF-8 octets for a non-ASCII character, `\x{HH}` is 6): what a `utf-8`
|
|
4
|
+
* ORCPT counts against the 500 characters of RFC 3461 §4.2 in the copies that
|
|
5
|
+
* do not read the wire (AGENTS.md, Deliberate duplications).
|
|
6
|
+
*/
|
|
7
|
+
export declare function utf8OrcptLength(address: string): number;
|
|
8
|
+
/**
|
|
9
|
+
* Encodes an address as `utf-8-addr-xtext` (`unicode` false, 7-bit safe) or
|
|
10
|
+
* `utf-8-addr-unitext` (`unicode` true, for a session with SMTPUTF8: the
|
|
11
|
+
* non-ASCII characters stay raw UTF-8); every other character is
|
|
12
|
+
* `\x{HH}` (at least 2 digits). `undefined` when the text holds a lone
|
|
13
|
+
* surrogate or a character the grammar cannot express (NUL, `0A` to `0F`, `1A`
|
|
14
|
+
* to `1F`).
|
|
15
|
+
*/
|
|
16
|
+
export declare function encodeUtf8Orcpt(address: string, unicode: boolean): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Decodes the address of an `ORCPT=utf-8;` value (RFC 6533 §3): the
|
|
19
|
+
* `utf-8-addr-xtext` form, plus, when `unicode` (the transaction uses
|
|
20
|
+
* SMTPUTF8), raw UTF-8 as `utf-8-addr-unitext` allows. `undefined` when it is
|
|
21
|
+
* neither: a character that must be escaped, a malformed or out-of-range
|
|
22
|
+
* `\x{…}`, an escaped NUL or control the grammar has no HEXPOINT for (`0A` to
|
|
23
|
+
* `0F`, `1A` to `1F`: line breaks stay out of a DSN header), a raw non-ASCII character
|
|
24
|
+
* without SMTPUTF8, or nothing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function decodeUtf8Orcpt(value: string, unicode: boolean): string | undefined;
|
|
27
|
+
//# sourceMappingURL=orcpt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orcpt.d.ts","sourceRoot":"","sources":["../../src/protocol/orcpt.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAsBpB"}
|
|
@@ -10,11 +10,12 @@ export declare const RCPT_DSN: Set<string>;
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function readMailDsn(into: Pick<Transaction, 'ret' | 'envid'>, key: string, value: string, repeated: readonly string[]): string | undefined;
|
|
12
12
|
/**
|
|
13
|
-
* Reads one DSN parameter of RCPT TO into `into
|
|
13
|
+
* Reads one DSN parameter of RCPT TO into `into`; `smtputf8` is whether the
|
|
14
|
+
* transaction uses SMTPUTF8 (the form of a `utf-8` ORCPT). The text of the `501` to
|
|
14
15
|
* answer when the value is wrong, else `undefined`.
|
|
15
16
|
*/
|
|
16
17
|
export declare function readRcptDsn(into: {
|
|
17
18
|
notify?: 'NEVER' | readonly DsnNotify[];
|
|
18
19
|
orcpt?: EnvelopeRecipient['orcpt'];
|
|
19
|
-
}, key: string, value: string, repeated: readonly string[]): string | undefined;
|
|
20
|
+
}, key: string, value: string, repeated: readonly string[], smtputf8?: boolean): string | undefined;
|
|
20
21
|
//# sourceMappingURL=dsn-params.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsn-params.d.ts","sourceRoot":"","sources":["../../src/server/dsn-params.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dsn-params.d.ts","sourceRoot":"","sources":["../../src/server/dsn-params.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wDAAwD;AACxD,eAAO,MAAM,QAAQ,aAA4B,CAAC;AAClD,sDAAsD;AACtD,eAAO,MAAM,QAAQ,aAA+B,CAAC;AAoDrD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAYpB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE;IACL,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,SAAS,EAAE,CAAC;IACxC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACnC,EACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,UAAQ,GACd,MAAM,GAAG,SAAS,CAYpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/server/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY/C,sHAAsH;AACtH,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED,4HAA4H;AAC5H,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/server/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY/C,sHAAsH;AACtH,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED,4HAA4H;AAC5H,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
package/docs/guide.md
CHANGED
|
@@ -477,7 +477,7 @@ export interface EnvelopeRecipient {
|
|
|
477
477
|
readonly address: string; // the matching entry of `to`
|
|
478
478
|
/** NOTIFY= (RFC 3461 §4.1): `'NEVER'` or the events given; absent when not sent. */
|
|
479
479
|
readonly notify?: 'NEVER' | readonly ('SUCCESS' | 'FAILURE' | 'DELAY')[];
|
|
480
|
-
/** ORCPT= (RFC 3461 §4.2): the type as sent and the address decoded
|
|
480
|
+
/** ORCPT= (RFC 3461 §4.2): the type as sent and the address decoded (xtext, or RFC 6533 for `utf-8`). */
|
|
481
481
|
readonly orcpt?: { readonly type: string; readonly address: string };
|
|
482
482
|
}
|
|
483
483
|
```
|
|
@@ -658,10 +658,24 @@ The server advertises `DSN` (RFC 3461) in its EHLO reply, always (no option to
|
|
|
658
658
|
turn it off). A client may then send `RET=FULL|HDRS` and `ENVID=<xtext>` on
|
|
659
659
|
`MAIL FROM`, and `NOTIFY=NEVER` (or a comma list of `SUCCESS`, `FAILURE`,
|
|
660
660
|
`DELAY`) and `ORCPT=<addr-type>;<xtext>` on `RCPT TO`. The server checks
|
|
661
|
-
their syntax, decodes
|
|
661
|
+
their syntax, decodes them (`rfc822` as xtext, `utf-8` per RFC 6533, below)
|
|
662
|
+
and puts them on the `Envelope` `onData`
|
|
662
663
|
receives: `ret` and `envid`, and for each accepted recipient `notify` and
|
|
663
664
|
`orcpt` in `recipients`. `to` is unchanged.
|
|
664
665
|
|
|
666
|
+
`ORCPT` keeps the type as sent. `utf-8`, matched in any case, is read per RFC
|
|
667
|
+
6533; every other type, `rfc822` included, is xtext (RFC 3461 §4, §5.1(b)). `utf-8`
|
|
668
|
+
(RFC 6533 §3) is `utf-8-addr-xtext`: printable ASCII as itself, and
|
|
669
|
+
`\x{HEX}` (2 to 6 hexadecimal digits) for a non-ASCII character and for
|
|
670
|
+
space, `\`, `+` and `=`; when the transaction used `SMTPUTF8` on `MAIL FROM`
|
|
671
|
+
it may also be `utf-8-addr-unitext`, with the non-ASCII characters as raw
|
|
672
|
+
UTF-8. The address in `orcpt.address` is decoded in both cases. A raw
|
|
673
|
+
non-ASCII address without `SMTPUTF8`, or a malformed or out-of-range escape
|
|
674
|
+
(or one for NUL or a control character RFC 6533's grammar has no escape for,
|
|
675
|
+
`0A` to `0F` and `1A` to `1F`) is `501 5.5.4`. Escapes are accepted leniently:
|
|
676
|
+
leading zeros and escaped printable ASCII, which RFC 6533's HEXPOINT does not
|
|
677
|
+
produce. The 500 characters of a `utf-8` value count as sent on the wire.
|
|
678
|
+
|
|
665
679
|
The server does nothing else with them. Once it advertises DSN, the app that
|
|
666
680
|
receives these parameters must honour them, or the client is told something
|
|
667
681
|
untrue:
|
|
@@ -699,10 +713,15 @@ after `HELO` gets `555 <PARAM> needs EHLO`.
|
|
|
699
713
|
`Envelope.recipients`: `address`, `notify`, `orcpt`, matched to `to` by
|
|
700
714
|
address), so a received envelope can be passed through when a relay hands the
|
|
701
715
|
message on. They are written only when the next hop's EHLO lists `DSN`, with
|
|
702
|
-
`envid` and the `orcpt` address xtext-encoded (RFC 3461 §4).
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
716
|
+
`envid` and the `orcpt` address xtext-encoded (RFC 3461 §4). A `utf-8`
|
|
717
|
+
`orcpt` is encoded per RFC 6533 §3: `utf-8-addr-unitext` (non-ASCII kept as
|
|
718
|
+
UTF-8) when the transaction uses `SMTPUTF8`, else `utf-8-addr-xtext`
|
|
719
|
+
(`\x{HEX}`). An `orcpt` of another type is relayed as `type;xtext(address)`, the
|
|
720
|
+
type's case kept (RFC 3461 §5.2(d)). An `orcpt` whose address is not ASCII (type `rfc822`), holds a
|
|
721
|
+
lone surrogate (any type) or has no RFC 6533 escape (`utf-8`), or a `utf-8` one
|
|
722
|
+
over 500 characters as sent, is left out of the command, not refused. One of
|
|
723
|
+
another type over 500 characters as sent is refused with `INVALID_OPTION`.
|
|
724
|
+
A relay never fails on what a received envelope carries. The type is written as given. When the next hop lists no `DSN` nothing is sent, the delivery goes
|
|
706
725
|
through as usual, and the result says `dsnOffered: false`: the relay must then
|
|
707
726
|
generate the DSNs itself (RFC 3461 §5.2.2).
|
|
708
727
|
|
|
@@ -725,7 +744,8 @@ if (!result.dsnOffered) {
|
|
|
725
744
|
`dsnOffered` is the server listing `DSN` in EHLO; it does not prove the next
|
|
726
745
|
hop will send a DSN. These are `INVALID_OPTION`: a wrong `ret`, `notify` or
|
|
727
746
|
`orcpt` shape; an `envid` over 100 characters once xtext-encoded (RFC 3461
|
|
728
|
-
§4.4); an `orcpt` over 500 characters once encoded (§4.2
|
|
747
|
+
§4.4); an `orcpt` over 500 characters once encoded (§4.2; for a `utf-8` `orcpt`, the
|
|
748
|
+
unitext form: raw UTF-8 octets, `\x{HH}` = 6), whose type is not a
|
|
729
749
|
token, or whose address is empty; a `recipients` entry not in `to`, or named
|
|
730
750
|
twice.
|
|
731
751
|
|
|
@@ -1987,6 +2007,7 @@ console.log(chunk.done, reader.bareLineBreaks);
|
|
|
1987
2007
|
| PIPELINING | RFC 2920 |
|
|
1988
2008
|
| 8BITMIME | RFC 6152 |
|
|
1989
2009
|
| DSN parameters (`RET`, `ENVID`, `NOTIFY`, `ORCPT`) and xtext | RFC 3461 §4 |
|
|
2010
|
+
| The `utf-8` `ORCPT` address type | RFC 6533 §3 |
|
|
1990
2011
|
| SMTPUTF8 | RFC 6531 |
|
|
1991
2012
|
| ENHANCEDSTATUSCODES and the codes themselves | RFC 2034, RFC 3463 |
|
|
1992
2013
|
| STARTTLS | RFC 3207 |
|
|
@@ -2018,8 +2039,9 @@ each one comes from.
|
|
|
2018
2039
|
- **Connection reuse.** The client opens one connection per message, and
|
|
2019
2040
|
sends no `RSET`. Several messages to one destination over one session is
|
|
2020
2041
|
on the [roadmap](roadmap.md).
|
|
2021
|
-
-
|
|
2022
|
-
|
|
2042
|
+
- **A non-ASCII `ORCPT` of type `rfc822` in the client**: RFC 6533 defines
|
|
2043
|
+
`utf-8` for it, which both sides handle; the client leaves a non-ASCII
|
|
2044
|
+
`rfc822` address out of `RCPT TO`. Any other type is relayed as xtext.
|
|
2023
2045
|
- **CHUNKING in the client.** It sends DATA, never `BDAT`.
|
|
2024
2046
|
- **DANE and MTA-STS.** By MX, TLS is opportunistic; a policy that makes
|
|
2025
2047
|
it required for a domain is for later.
|