const getMailboxes = async (user, password) => { return ["INBOX", "Sent", "Drafts", "Junk", "Trash", "Important"]; }; const mockEmails = [ { id: "1", seq: 1, from: "Google ", subject: "새로운 기기에서 로그인됨", date: new Date().toISOString(), flags: [], snippet: "Windows 환경의 Chrome 브라우저에서 귀하의 Google 계정에 로그인했습니다. 본인의 활동이 맞다면 이 이메일을 무시하셔도 됩니다.", }, { id: "2", seq: 2, from: "Amazon Web Services ", subject: "AWS Free Tier 사용량 알림", date: new Date(Date.now() - 3600000).toISOString(), flags: ["\\Seen"], snippet: "현재 AWS 프리 티어 사용량이 한도에 근접했습니다. 청구 대시보드에서 현재 사용량을 확인하고 예상 비용을 관리하세요.", }, { id: "3", seq: 3, from: "Slack ", subject: "[Slack] 새로운 멘션이 있습니다", date: new Date(Date.now() - 86400000).toISOString(), flags: ["\\Seen", "\\Flagged"], // Starred snippet: "frontend-team 채널에서 @caadiq 님을 멘션했습니다: '이번 주 스프린트 계획 회의 시간 확인 부탁드립니다.'", }, { id: "4", seq: 4, from: "Github ", subject: "Security alert for your repository", date: new Date(Date.now() - 172800000).toISOString(), flags: ["\\Seen"], snippet: "We found a potential security vulnerability in one of your dependencies. A Dependabot alert has been created.", }, { id: "5", seq: 5, from: "Notion ", subject: "12월 제품 업데이트 소식", date: new Date(Date.now() - 259200000).toISOString(), flags: [], snippet: "이번 달 업데이트: 새로운 데이터베이스 보기 옵션, 향상된 검색 기능, 그리고 모바일 앱 성능 개선사항을 확인해보세요.", }, { id: "6", seq: 6, from: "쿠팡 ", subject: "주문하신 상품이 배송 완료되었습니다", date: new Date(Date.now() - 432000000).toISOString(), flags: ["\\Seen"], snippet: "고객님께서 주문하신 '맥북 프로 M3 Max' 상품이 문 앞에 배송되었습니다. 사진을 확인해주세요.", }, { id: "7", seq: 7, from: "Toss Team ", subject: "12월 카드 명세서가 도착했습니다", date: new Date(Date.now() - 604800000).toISOString(), flags: ["\\Seen"], snippet: "이번 달 총 사용 금액은 1,250,000원입니다. 결제일은 25일이며, 자세한 내역은 앱에서 확인하실 수 있습니다.", }, ]; const getEmails = async (user, password, boxName = "INBOX", limit = 20) => { // Simulate network delay // await new Promise((resolve) => setTimeout(resolve, 500)); let filtered = [...mockEmails]; // Simple Mock Filtering Logic if (boxName === "Important") { console.log("Fetching Important (Mock)"); // Return items that match the user's idea of 'Important' or just specific mock items // In real IMAP we used FLAGGED. Let's filter by flag here too if we want realism, // or just return specific ones. // Let's rely on the mock data having flags. return filtered.filter((e) => e.flags && e.flags.includes("\\Flagged")); } if (boxName === "Sent") { return [ { id: "101", from: "Me ", subject: "Re: 프로젝트 일정 공유", date: new Date().toISOString(), flags: ["\\Seen"], snippet: "네, 확인했습니다. 말씀하신 대로 진행하겠습니다.", }, ]; } if (boxName === "Drafts") { return [ { id: "201", from: "Me ", subject: "제안서 초안", date: new Date().toISOString(), flags: [], snippet: "안녕하세요 대표님, 이번 프로젝트 제안서 초안 송부드립니다...", }, ]; } if (boxName === "Junk" || boxName === "spam") { return []; } if (boxName === "Trash") { return [ { id: "999", from: "Spam ", subject: "You won a lottery!", date: new Date(Date.now() - 100000000).toISOString(), flags: ["\\Seen"], snippet: "Click here to claim your prize...", }, ]; } // Default INBOX return return filtered; }; const connect = async () => { // No-op for mock return true; }; module.exports = { connect, getMailboxes, getEmails, };