This commit is contained in:
Philipp Kunz 2025-05-22 18:38:04 +00:00
parent 72898c67b7
commit f065a9c952
4 changed files with 48 additions and 0 deletions

View File

@ -307,6 +307,18 @@ export class CommandHandler implements ICommandHandler {
* @param response - Response to send
*/
public sendResponse(socket: plugins.net.Socket | plugins.tls.TLSSocket, response: string): void {
// Check if socket is still writable before attempting to write
if (socket.destroyed || socket.readyState !== 'open' || !socket.writable) {
SmtpLogger.debug(`Skipping response to closed/destroyed socket: ${response}`, {
remoteAddress: socket.remoteAddress,
remotePort: socket.remotePort,
destroyed: socket.destroyed,
readyState: socket.readyState,
writable: socket.writable
});
return;
}
try {
socket.write(`${response}${SMTP_DEFAULTS.CRLF}`);
adaptiveLogger.logResponse(response, socket);

View File

@ -952,6 +952,18 @@ export class ConnectionManager implements IConnectionManager {
* @param response - Response to send
*/
private sendResponse(socket: plugins.net.Socket | plugins.tls.TLSSocket, response: string): void {
// Check if socket is still writable before attempting to write
if (socket.destroyed || socket.readyState !== 'open' || !socket.writable) {
SmtpLogger.debug(`Skipping response to closed/destroyed socket: ${response}`, {
remoteAddress: socket.remoteAddress,
remotePort: socket.remotePort,
destroyed: socket.destroyed,
readyState: socket.readyState,
writable: socket.writable
});
return;
}
try {
socket.write(`${response}${SMTP_DEFAULTS.CRLF}`);
adaptiveLogger.logResponse(response, socket);

View File

@ -1139,6 +1139,18 @@ SmtpLogger.debug(`Parsed email subject: ${subject}`, { subject });
* @param response - Response message
*/
private sendResponse(socket: plugins.net.Socket | plugins.tls.TLSSocket, response: string): void {
// Check if socket is still writable before attempting to write
if (socket.destroyed || socket.readyState !== 'open' || !socket.writable) {
SmtpLogger.debug(`Skipping response to closed/destroyed socket: ${response}`, {
remoteAddress: socket.remoteAddress,
remotePort: socket.remotePort,
destroyed: socket.destroyed,
readyState: socket.readyState,
writable: socket.writable
});
return;
}
try {
socket.write(`${response}${SMTP_DEFAULTS.CRLF}`);
SmtpLogger.logResponse(response, socket);

View File

@ -300,6 +300,18 @@ export class TlsHandler implements ITlsHandler {
* @param response - Response message
*/
private sendResponse(socket: plugins.net.Socket | plugins.tls.TLSSocket, response: string): void {
// Check if socket is still writable before attempting to write
if (socket.destroyed || socket.readyState !== 'open' || !socket.writable) {
SmtpLogger.debug(`Skipping response to closed/destroyed socket: ${response}`, {
remoteAddress: socket.remoteAddress,
remotePort: socket.remotePort,
destroyed: socket.destroyed,
readyState: socket.readyState,
writable: socket.writable
});
return;
}
try {
socket.write(`${response}\r\n`);
SmtpLogger.logResponse(response, socket);