// SMTP 단독 테스트 — DB 의존 없이 메일 발송 확인 // 사용법: node scripts/test-smtp.mjs <받는사람이메일> import nodemailer from "nodemailer"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const envPath = path.join(__dirname, "..", ".env.development"); if (fs.existsSync(envPath)) { for (const line of fs.readFileSync(envPath, "utf-8").split(/\r?\n/)) { const m = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/); if (m) process.env[m[1]] ??= m[2].replace(/^["']|["']$/g, ""); } } const to = process.argv[2] || "chpark@wace.me"; const host = process.env.SMTP_HOST; const port = Number(process.env.SMTP_PORT || 465); const user = process.env.SMTP_USER; const pass = process.env.SMTP_PASS; const from = process.env.SMTP_FROM || user; console.log("[smtp]", { host, port, user, from, to }); if (!host || !user || !pass) { console.error("SMTP 환경변수가 누락되었습니다."); process.exit(1); } const transporter = nodemailer.createTransport({ host, port, secure: port === 465, auth: { user, pass }, tls: { rejectUnauthorized: false }, connectionTimeout: 15000, socketTimeout: 20000, }); try { console.log("[smtp] verify connection..."); await transporter.verify(); console.log("[smtp] ✔ verify OK"); console.log("[smtp] sending test mail..."); const info = await transporter.sendMail({ from, to, subject: "[모모유통] SMTP 연결 테스트", html: `

모모유통 메일 서버 테스트

이 메일이 도착했다면 SMTP 발송이 정상 작동하는 것입니다.

실제 발주 승인 시에는 이 메일에 거래명세표 엑셀(.xlsx) 파일이 첨부됩니다.

`, text: "모모유통 SMTP 테스트 메일입니다.", }); console.log("[smtp] ✔ sent:", info.messageId); console.log("[smtp] response:", info.response); } catch (err) { console.error("[smtp] ✖ FAILED"); console.error(err); process.exit(2); }