mailbox/backend/services/imapService.js

151 lines
4.6 KiB
JavaScript
Raw Permalink Normal View History

2025-12-16 08:18:15 +09:00
const getMailboxes = async (user, password) => {
return ["INBOX", "Sent", "Drafts", "Junk", "Trash", "Important"];
};
const mockEmails = [
{
id: "1",
seq: 1,
from: "Google <no-reply@accounts.google.com>",
subject: "새로운 기기에서 로그인됨",
date: new Date().toISOString(),
flags: [],
snippet:
"Windows 환경의 Chrome 브라우저에서 귀하의 Google 계정에 로그인했습니다. 본인의 활동이 맞다면 이 이메일을 무시하셔도 됩니다.",
},
{
id: "2",
seq: 2,
from: "Amazon Web Services <aws-marketing-email-replies@amazon.com>",
subject: "AWS Free Tier 사용량 알림",
date: new Date(Date.now() - 3600000).toISOString(),
flags: ["\\Seen"],
snippet:
"현재 AWS 프리 티어 사용량이 한도에 근접했습니다. 청구 대시보드에서 현재 사용량을 확인하고 예상 비용을 관리하세요.",
},
{
id: "3",
seq: 3,
from: "Slack <notification@slack.com>",
subject: "[Slack] 새로운 멘션이 있습니다",
date: new Date(Date.now() - 86400000).toISOString(),
flags: ["\\Seen", "\\Flagged"], // Starred
snippet:
"frontend-team 채널에서 @caadiq 님을 멘션했습니다: '이번 주 스프린트 계획 회의 시간 확인 부탁드립니다.'",
},
{
id: "4",
seq: 4,
from: "Github <noreply@github.com>",
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 <notify@mail.notion.so>",
subject: "12월 제품 업데이트 소식",
date: new Date(Date.now() - 259200000).toISOString(),
flags: [],
snippet:
"이번 달 업데이트: 새로운 데이터베이스 보기 옵션, 향상된 검색 기능, 그리고 모바일 앱 성능 개선사항을 확인해보세요.",
},
{
id: "6",
seq: 6,
from: "쿠팡 <noreply@coupang.com>",
subject: "주문하신 상품이 배송 완료되었습니다",
date: new Date(Date.now() - 432000000).toISOString(),
flags: ["\\Seen"],
snippet:
"고객님께서 주문하신 '맥북 프로 M3 Max' 상품이 문 앞에 배송되었습니다. 사진을 확인해주세요.",
},
{
id: "7",
seq: 7,
from: "Toss Team <support@toss.im>",
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 <me@caadiq.co.kr>",
subject: "Re: 프로젝트 일정 공유",
date: new Date().toISOString(),
flags: ["\\Seen"],
snippet: "네, 확인했습니다. 말씀하신 대로 진행하겠습니다.",
},
];
}
if (boxName === "Drafts") {
return [
{
id: "201",
from: "Me <me@caadiq.co.kr>",
subject: "제안서 초안",
date: new Date().toISOString(),
flags: [],
snippet: "안녕하세요 대표님, 이번 프로젝트 제안서 초안 송부드립니다...",
},
];
}
if (boxName === "Junk" || boxName === "spam") {
return [];
}
if (boxName === "Trash") {
return [
{
id: "999",
from: "Spam <spam@spam.com>",
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,
};