From 3634cee955a1deb5e0b31e83b67c72967499ed94 Mon Sep 17 00:00:00 2001 From: ttipo Date: Wed, 28 Oct 2026 17:11:26 +0900 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=EB=B0=9B=EB=8A=94=20=EC=82=AC?= =?UTF-8?q?=EB=9E=8C=EB=B3=84=20=EB=B0=9C=EC=86=A1=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=C2=B7=20=EB=B3=B4=EB=82=B4=EB=8A=94=20?= =?UTF-8?q?=EC=A4=91=20=EC=84=B8=EC=85=98=20=EB=B0=94=EB=80=9C=20=EB=A7=89?= =?UTF-8?q?=EA=B8=B0=20=C2=B7=20=EB=B6=80=EC=9E=AC=EC=A4=91=20=ED=95=9C?= =?UTF-8?q?=EB=8F=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 일부 거절: 보낸 것으로 떠나며 "보냈지만 N명은 받지 못했습니다 — 주소 (까닭)" 오류 모양 알림 + [보낸편지함 보기] - MAIL_010: 받는 사람 안내 띠 · 초점(알림 없음, 칸은 aria-invalid · aria-describedby), MAIL_011: 인터셉터 알림 — 둘 다 같은 키로 다시 보낸다 - 보내기를 시작한 세션이 바뀌면(로그아웃 · 만료 · 다른 계정 로그인) 보내지 않고, 결과 알림 · 보내지 못한 메일의 저장본 남기기도 하지 않는다 — 다른 계정의 쿠키로 앞 사용자의 메일이 나가거나 저장되던 틈 - 응답의 rejectedRecipients 는 sendMessage 한 곳에서 배열로 맞춘다(필드가 없는 옛 서버) - 부재중 자동 응답 제목 150 · 내용 600 (켤 때 검사) Co-Authored-By: Claude Opus 5.5 --- .../src/components/feedback/ToastHost.vue | 5 +- frontend/src/components/mail/ComposeAlert.vue | 2 +- .../src/components/mail/RecipientField.vue | 13 +- .../settings/VacationMessageFields.vue | 2 +- frontend/src/composables/useApi.spec.ts | 2 + .../src/composables/useComposeDraftLink.ts | 18 +- frontend/src/composables/useDraftSaving.ts | 17 +- frontend/src/composables/useMail.spec.ts | 42 ++++ frontend/src/composables/useMail.ts | 15 +- frontend/src/composables/useToast.ts | 3 +- .../src/pages/mail/ComposePage.drafts.spec.ts | 120 ++++++++++ frontend/src/pages/mail/ComposePage.spec.ts | 214 +++++++++++++++++- frontend/src/pages/mail/ComposePage.vue | 112 ++++++--- .../pages/settings/MailVacationPage.spec.ts | 33 ++- .../src/shared/constants/mail-vacation.ts | 12 +- frontend/src/shared/constants/mail.ts | 26 ++- frontend/src/shared/types/mail.ts | 21 +- .../src/shared/utils/idempotency-key.spec.ts | 3 + frontend/src/shared/utils/idempotency-key.ts | 3 +- .../src/shared/utils/mail-send-result.spec.ts | 49 ++++ frontend/src/shared/utils/mail-send-result.ts | 33 +++ .../src/shared/utils/mail-vacation.spec.ts | 11 + frontend/src/shared/utils/mail-vacation.ts | 4 +- frontend/src/stores/toast.store.spec.ts | 13 ++ frontend/src/stores/toast.store.ts | 3 +- 25 files changed, 707 insertions(+), 69 deletions(-) create mode 100644 frontend/src/composables/useMail.spec.ts create mode 100644 frontend/src/shared/utils/mail-send-result.spec.ts create mode 100644 frontend/src/shared/utils/mail-send-result.ts diff --git a/frontend/src/components/feedback/ToastHost.vue b/frontend/src/components/feedback/ToastHost.vue index 1e24d85..47500ce 100644 --- a/frontend/src/components/feedback/ToastHost.vue +++ b/frontend/src/components/feedback/ToastHost.vue @@ -1,6 +1,6 @@ @@ -975,6 +1018,7 @@ watch(allRecipients, () => { input-id="compose-to" placeholder="메일 주소 입력 후 Enter" :error-id="RECIPIENT_ERROR_ID" + :rejected="rejectedByServer !== null" :disabled="preparing" >