import nodemailer from "nodemailer";
import type { Logger } from "../logger.js";
import type { VerifyAccountInput } from "../schemas.js";
import { resolveAccountConfig, loadServerConfig } from "../config.js";
import { ToolError } from "../errors.js";
import { successResponse, errorResponse, type ToolCallResult } from "./response.js";
/**
* Verify SMTP account configuration and connectivity.
*/
export async function handleVerifyAccount(
input: VerifyAccountInput,
env: NodeJS.ProcessEnv,
_logger: Logger,
): Promise<ToolCallResult> {
try {
const accountId = input.account_id.toLowerCase();
const { policy } = loadServerConfig(env);
const { config, missing } = resolveAccountConfig(env, accountId);
if (missing.length > 0 || !config) {
throw new ToolError(
"CONFIG_MISSING",
`Account not configured. Missing: ${missing.join(", ")}`,
);
}
const transport = nodemailer.createTransport({
host: config.host,
port: config.port,
secure: config.secure,
auth: {
user: config.user,
pass: config.pass,
},
connectionTimeout: policy.connectTimeoutMs,
socketTimeout: policy.socketTimeoutMs,
});
await transport.verify();
const summary = `SMTP account ${accountId} verified successfully.`;
return successResponse({
summary,
data: {
account_id: accountId,
status: "ok",
},
});
} catch (error) {
const message = error instanceof Error ? error.message : "SMTP verification failed.";
return errorResponse(message);
}
}