import { Request, Response } from 'express'; import { mailSendSimpleService } from '../services/mailSendSimpleService'; export class MailSendSimpleController { /** * 메일 발송 (단건 또는 소규모) */ async sendMail(req: Request, res: Response) { try { const { accountId, templateId, to, subject, variables, customHtml } = req.body; // 필수 파라미터 검증 if (!accountId || !to || !Array.isArray(to) || to.length === 0) { return res.status(400).json({ success: false, message: '계정 ID와 수신자 이메일이 필요합니다.', }); } if (!subject) { return res.status(400).json({ success: false, message: '메일 제목이 필요합니다.', }); } // 템플릿 또는 커스텀 HTML 중 하나는 있어야 함 if (!templateId && !customHtml) { return res.status(400).json({ success: false, message: '템플릿 또는 메일 내용이 필요합니다.', }); } // 메일 발송 const result = await mailSendSimpleService.sendMail({ accountId, templateId, to, subject, variables, customHtml, }); if (result.success) { return res.json({ success: true, data: result, message: '메일이 발송되었습니다.', }); } else { return res.status(500).json({ success: false, message: result.error || '메일 발송 실패', }); } } catch (error: unknown) { const err = error as Error; return res.status(500).json({ success: false, message: '메일 발송 중 오류가 발생했습니다.', error: err.message, }); } } /** * SMTP 연결 테스트 */ async testConnection(req: Request, res: Response) { try { const { accountId } = req.body; if (!accountId) { return res.status(400).json({ success: false, message: '계정 ID가 필요합니다.', }); } const result = await mailSendSimpleService.testConnection(accountId); return res.json(result); } catch (error: unknown) { const err = error as Error; return res.status(500).json({ success: false, message: '연결 테스트 실패', error: err.message, }); } } } export const mailSendSimpleController = new MailSendSimpleController();