150 lines
4.6 KiB
JavaScript
150 lines
4.6 KiB
JavaScript
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,
|
|
};
|