From 3e59693e017742d971f490eb7c58870cb745a98d Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Fri, 18 Jul 2025 03:58:34 +0000 Subject: (김준회) 결재 모듈 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/knox-api/mail/knox-mail.ts | 312 ++++++ lib/knox-api/mail/mail-guide.html | 2114 +++++++++++++++++++++++++++++++++++++ 2 files changed, 2426 insertions(+) create mode 100644 lib/knox-api/mail/knox-mail.ts create mode 100644 lib/knox-api/mail/mail-guide.html (limited to 'lib/knox-api/mail') diff --git a/lib/knox-api/mail/knox-mail.ts b/lib/knox-api/mail/knox-mail.ts new file mode 100644 index 00000000..48ba6c16 --- /dev/null +++ b/lib/knox-api/mail/knox-mail.ts @@ -0,0 +1,312 @@ +'use server'; + +// Knox Mail API TypeScript Library for Next.js Server Actions +// Based on Knox Mail API Guide v2.0 + +export interface KnoxMailConfig { + baseUrl: string; + systemId: string; + userId: string; +} + +// 공통 타입 정의 +export interface KnoxMailResponse { + result: 'success' | 'error'; + mailId?: string; + data?: T; + error?: { + code: string; + message: string; + }; +} + +// 발신인 정보 +export interface Sender { + emailAddress: string; +} + +// 수신인 정보 +export interface Recipient { + emailAddress: string; + recipientType: 'TO' | 'CC' | 'BCC'; +} + +// 일반 메일 발신 요청 +export interface SendMailRequest { + subject: string; + contents: string; + contentType: 'TEXT' | 'HTML' | 'MIME'; + docSecuType: 'PERSONAL' | 'OFFICIAL'; + sender: Sender; + recipients: Recipient[]; + attachments?: File[]; + reservedTime?: string; // yyyy-MM-dd HH:mm 형식 +} + +// 대외비 메일 DRM 옵션 +export interface DrmOption { + validDays: string; + useCount: string; + canView: string; + canPrint: string; + notifyExternalUser: string; + notifyInternalUser: string; +} + +// 대외비 메일 발신 요청 +export interface SendSecuMailRequest extends Omit { + docSecuType: 'CONFIDENTIAL' | 'CONFIDENTIAL_STRICT'; + drmOption: DrmOption; +} + +// 메일 발신 취소 요청 +export interface CancelMailRequest { + recipients: string[]; +} + +// 메일 별 수신상태 조회 요청 +export interface DeliveryStatusCountRequest { + mailIds: string[]; +} + +// 수신상태 카운트 응답 +export interface DeliveryStatusCount { + mailId: string; + totalStatusCount: number; + sendingCount: number; + openCount: number; + unopenCount: number; + etcCount: number; + sendCancelCount: number; + sendCancelReqCount: number; + sendBlockCount: number; + sendFailCount: number; + drmProcessCount: number; + drmFailCount: number; + reserveCount: number; + reserveCancelCount: number; + unknownCount: number; +} + +// 수신인 별 수신상태 응답 +export interface RecipientDeliveryStatus { + name: string; + position: string; + enName: string; + enPosition: string; + company: string; + department: string; + enDepartment: string; + email: string; + userID: string; + recipientType: 'TO' | 'CC' | 'BCC'; + updateTime: { + month: number; + year: number; + dayOfMonth: number; + hourOfDay: number; + minute: number; + second: number; + }; + status: string; + needOpenNotify: boolean; + isDLAddr: boolean; +} + +// 내부 유틸리티 함수들 +function getHeaders(systemId: string): Record { + return { + 'System-ID': systemId, + 'Content-Type': 'application/json', + }; +} + +async function makeRequest( + config: KnoxMailConfig, + endpoint: string, + method: 'GET' | 'POST', + data?: unknown, + isMultipart = false +): Promise> { + const url = `${config.baseUrl}${endpoint}?userId=${config.userId}`; + + const headers = getHeaders(config.systemId); + if (isMultipart) { + delete headers['Content-Type']; // multipart/form-data는 브라우저가 자동으로 설정 + } + + try { + const response = await fetch(url, { + method, + headers, + body: data ? (isMultipart ? data as FormData : JSON.stringify(data)) : undefined, + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + return { + result: 'error', + error: { + code: response.status.toString(), + message: errorData.message || response.statusText, + }, + }; + } + + const result = await response.json(); + return { + result: 'success', + ...result, + }; + } catch (error) { + return { + result: 'error', + error: { + code: 'NETWORK_ERROR', + message: error instanceof Error ? error.message : 'Unknown error', + }, + }; + } +} + +function createFormData(mailData: Record, attachments?: File[]): FormData { + const formData = new FormData(); + + // 메일 데이터를 JSON으로 추가 + formData.append('mail', JSON.stringify(mailData)); + + // 첨부파일이 있으면 추가 + if (attachments && attachments.length > 0) { + attachments.forEach(file => { + formData.append('attachments', file); + }); + } + + return formData; +} + +// Next.js 서버 액션 함수들 + +/** + * 일반 메일 발신 서버 액션 + * @param config Knox Mail API 설정 + * @param request 메일 발신 요청 데이터 + * @returns 발신 결과 (mailId 포함) + */ +export async function sendMail( + config: KnoxMailConfig, + request: SendMailRequest +): Promise> { + const { attachments, ...mailData } = request; + + if (attachments && attachments.length > 0) { + const formData = createFormData(mailData, attachments); + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/send', 'POST', formData, true); + } else { + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/send', 'POST', mailData); + } +} + +/** + * 대외비 메일 발신 서버 액션 + * @param config Knox Mail API 설정 + * @param request 대외비 메일 발신 요청 데이터 + * @returns 발신 결과 (mailId 포함) + */ +export async function sendSecuMail( + config: KnoxMailConfig, + request: SendSecuMailRequest +): Promise> { + const { attachments, ...mailData } = request; + + if (attachments && attachments.length > 0) { + const formData = createFormData(mailData, attachments); + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/secu-send', 'POST', formData, true); + } else { + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/secu-send', 'POST', mailData); + } +} + +/** + * 메일 발신 취소 서버 액션 + * @param config Knox Mail API 설정 + * @param mailId 취소할 메일 ID + * @param request 취소 요청 데이터 (수신인 목록) + * @returns 취소 결과 + */ +export async function cancelMail( + config: KnoxMailConfig, + mailId: string, + request: CancelMailRequest +): Promise { + return makeRequest(config, `/mail/api/v2.0/mails/${mailId}/cancel`, 'POST', request); +} + +/** + * 메일 별 수신상태 조회 서버 액션 + * @param config Knox Mail API 설정 + * @param request 조회할 메일 ID 목록 + * @returns 메일별 수신상태 카운트 목록 + */ +export async function getDeliveryStatusCount( + config: KnoxMailConfig, + request: DeliveryStatusCountRequest +): Promise> { + return makeRequest(config, '/mail/api/v2.0/mails/deliverystatus/count', 'POST', request); +} + +/** + * 수신인 별 수신상태 조회 서버 액션 + * @param config Knox Mail API 설정 + * @param mailId 조회할 메일 ID + * @returns 수신인별 수신상태 목록 + */ +export async function getRecipientDeliveryStatus( + config: KnoxMailConfig, + mailId: string +): Promise> { + return makeRequest(config, `/mail/api/v2.0/mails/${mailId}/deliverystatus`, 'GET'); +} + +// 편의 함수들 +export async function createKnoxMailConfig( + baseUrl: string, + systemId: string, + userId: string +): Promise { + return { + baseUrl, + systemId, + userId, + }; +} + +// 에러 코드 상수 +export const KNOX_MAIL_ERROR_CODES = { + ML1001: '필수값 중 입력되지 않은 값이 있습니다.', + ML1002: '사용자 정보가 존재하지 않습니다.', + ML1003: '요청하신 데이터가 존재하지 않습니다.', + ML1101: '본문 (content) 값이 입력되지 않았습니다.', + ML1102: '첨부 파일 처리 중 에러가 발생했습니다.', + ML1104: '일반 메일 발신 중 docSecuType 값이 유효하지 않습니다.', + ML1107: '대외비/극비 보안 옵션 값이 유효하지 않습니다.', + ML1108: '대외비/극비 메일 contentType 값이 유효하지 않습니다.', + ML1109: '대외비/극비 메일 docSecuType 값이 유효하지 않습니다.', + ML1110: '극비 메일일 경우에는 내부 수신인에게만 메일 발신이 가능합니다.', + ML1111: '대외비/극비 메일에서 허용되지 않는 첨부 파일의 확장자가 있습니다.', + ML1112: '메일 제목 크기가 300 bytes를 초과하였습니다.', + ML1114: '메일 발신 API에서 허용되는 content 크기를 초과하였습니다.', + ML1115: '일반 메일 contentType 값이 유효하지 않습니다.', + ML1117: '메일 발신 API에서 발신가능한 최대 수신인을 초과하였습니다.', + ML1118: '수신자의 수신 타입이 잘못 설정되었습니다.', + CO400: '잘못된 요청입니다.', +} as const; + +// 타입 가드 함수들 +export function isKnoxMailError(response: KnoxMailResponse): response is KnoxMailResponse & { error: { code: string; message: string } } { + return response.result === 'error' && !!response.error; +} + +export function isKnoxMailSuccess(response: KnoxMailResponse): response is KnoxMailResponse & { result: 'success' } { + return response.result === 'success'; +} diff --git a/lib/knox-api/mail/mail-guide.html b/lib/knox-api/mail/mail-guide.html new file mode 100644 index 00000000..5e38d3a7 --- /dev/null +++ b/lib/knox-api/mail/mail-guide.html @@ -0,0 +1,2114 @@ +
+
+

메일

+
+
+

메일 연계 API 이용을 위한 상세 개발 가이드입니다.
메일 API는 메일 발신, 발신 취소, 상태 조회 세 가지 유형으로 나누어져 있습니다.

+
+
[정책 및 제약사항]
+
+
+
1. 발신인 정보는 녹스포탈 임직원만 지정 가능하며, 발신자의 거점으로 연계 호출해야 + 합니다.
+
2. 본문 사이즈는 최대 1MB 를 넘을 수 없습니다.
+
3. 한번에 10개의 첨부파일을 포함하여 발송할 수 있으며, 전체 첨부 사이즈는 10MB 를 넘을 + 수 없습니다.
+
4. 수신인은 최대 200명까지 지정이 가능합니다.
+
+
+
[API 목록]    테스트 페이지로 이동(Swagger)*Chrome Browser만 이용 가능합니다.
+
+
+ + + + + + + + + + + + + + + +
APIURIMethodDescription
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
일반 메일 + 발신/mail/api/v2.0/mails/send?userId=Knox아이디 + POSTKnox 메일을 + 발신한다.
대외비 + 메일 발신/mail/api/v2.0/mails/secu-send?userId=Knox아이디 + POSTKnox 대외비 메일을 + 발신한다.
메일 발신 + 취소/mail/api/v2.0/mails/{mailId}/cancel?userId=Knox아이디 + POSTKnox 내부로 발신한 메일을 + 발신 취소한다.
메일 별 수신상태 조회 + /mail/api/v2.0/mails/deliverystatus/count?userId=Knox아이디 + POST해당하는 + 메일에 대해서 전체 수신 상태를 조회한다.
수신인 별 수신상태 조회/mail/api/v2.0/mails/{mailId}/deliverystatus?userId=Knox아이디 + GET해당하는 메일에 + 대해서 수신인 별 수신 상태를 조회한다.
+
+

+
+
일반 메일 발신 +
+
+

/mail/api/v2.0/mails/send?userId=Knox아이디

+
+
+

삼성 그룹사 임직원 뿐만 아니라 외부수신인을 포함하여 메일 발신이 가능하며, 발신된 메일을 발신함에 + 저장됩니다.

+

주 1. 발신자의 메일>환경설정> 발신메일저장옵션에 따라 다를 수 있습니다.

+

주 2. Multipart/form-data 구성시 아래 Sample Request 와 같이 각 파트를 + 구분하여 form-data 의 name 값을 ‘mail’ , ‘attachments’ 로 호출해야 합니다.

+
+
+

Request Parameter

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No.PropertiesAttributeMandatoryParameter TypeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1연계 시스템 + 아이디System-IDYHeaderStringC60LD0001 +
2유저 아이디 + userId + YQueryStringknoxportal +
3메일 제목 + subject + YBodyString메일 제목입니다. +
4문서 + 타입docSecuTypeYBodyStringPERSONAL + 1) PERSONAL : 개인
2) OFFICIAL : + 공문
5메일 본문 + contents + YBodyString안녕하세요, 테스트 + 메일입니다.
6컨텐츠 + 타입contentTypeYBodyStringTEXT + 1) TEXT : 텍스트
2) MIME : + 마임
3) HTML : HTML
7발신인sender + YBodyJSON Object
8발신인 + 이메일emailAddressYBodyStringknoxportal@samsung.com + 1) 운영 환경 : knoxportal@samsung.com
2) 스테이지 환경 : knoxportal@stage.samsung.com
9수신인 + recipientsYBodyJSON List
10수신인 + 이메일emailAddress + YBodyStringknoxportal@samsung.com + 1) 운영 환경 : knoxportal@samsung.com
2) 스테이지 환경 : knoxportal@stage.samsung.com
11수신 + 타입recipientTypeYBodyStringTO + 1) 수신 : TO
2) 참조 : + CC
3) 비밀참조 : BCC
12첨부 + 파일attachmentsNBodymultipart/form-data + multipart/form-data로 변환된 바이너리 + 파일 및 파일명
13예약 + 발신reservedTimeNBodyStringyyyy-MM-dd HH:mm
ex)"2023-10-25 + 15:00"
10분 단위 설정 +
+
+
+
+

Response Parameter

+
+
+
+ + + + + + + + + + + + + + + + + +
PropertiesAttributeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
API 호출 성공 + 여부result + Stringsuccess
메일 아이디 + mailId + String20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5 +
+
+
+
+

Sample

+
+
+
+ + + + + + + + + + + +
RequestResponse
+
+
+ + + + + + + + + + + +
/mail/api/v2.0/mails/send?userId=knoxportal
body :

Content-Disposition: form-data; name="mail"
{
   "subject" : + "EMAIL SUBJECT (이메일 제목)",
   "contents" : "EMAIL BODY (이메일 + 본문)",
   "contentType" : + "TEXT",
   "docSecuType" : + "PERSONAL",
   "sender" + :
      {
         "emailAddress" + : "knoxportal@samsung.com"
      },
   "recipients" :
      [
         {
            "emailAddress" + : "knoxportal@samsung.com",
            "recipientType" + : "TO"
         }
      ]
}
Content-Disposition: form-data; + name="attachments"; filename="db변경.JPG"
Content-Type: image/jpeg
Content-Disposition: form-data; name="attachments"; filename="2 - + 복사본 (2).jpg"
Content-Type: + image/jpeg
{
   "mailId": + "20190531015540hdp_101d2782e07bbad98034606076da1e299b05",
   "result": "success"
}
+
+
+
Error Code
+
+
+ + + + + + + + + + + + + + + +
HTTP응답코드에러코드에러메시지조치방안
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
400ML1001필수값 중 입력되지 않은 값이 있습니다. + 모든 필수값이 + 입력되었는지 확인이 필요합니다. 또, 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.
400ML1002사용자 정보가 존재하지 않습니다.호출 시 입력하는 + URI 상의 Knox Id, 혹은 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.
400ML1104일반 메일 발신 중 docSecuType 값이 유효하지 + 않습니다.일반 메일의 + docSecuType은 PERSONAL(개인), OFFICIAL(공문) 두 값만 허용됩니다.
400ML1112메일 제목 크기가 300 bytes를 + 초과하였습니다.제목의 사이즈 확인이 + 필요합니다.
400ML1114메일 발신 API에서 허용되는 content 크기를 + 초과하였습니다.발신 API에서 본문 + 사이즈는 최대 1mb까지 입력이 가능합니다. 해당 크기를 초과하는 내용에 대해서는 가급적 첨부 파일 등을 이용 부탁드립니다.
400ML1115일반 메일 contentType 값이 유효하지 + 않습니다일반 메일의 + contentType 값은 HTML, MIME, TEXT 세 개의 값만 허용됩니다.
400ML1117메일 발신 API에서 발신가능한 최대 수신인을 + 초과하였습니다.입력 가능한 최대 + 수신인 수는 100명입니다.
400ML1118수신자의 수신 타입이 잘못 설정되었습니다. + 수신 타입은 + TO(수신), CC(참조), BCC(비밀참조) 세 개의 값만 허용됩니다.
403ML1102첨부 파일 처리 중 에러가 발생했습니다. + 첨부 파일의 + Multipart/form-data 형식 확인이 필요합니다.
400CO400잘못된 요청입니다.요청 파라미터를 + 확인해주세요. 특히 userId, docSecuType 이 누락되었는지 확인해주세요.
+
+

+
+
대외비 메일 + 발신
+
+

/mail/api/v2.0/mails/secu-send?userId=Knox아이디

+
+
+

대외비, 극비로 설정하여 보안 메일을 발송할 수 있습니다.
보안 메일 옵션을 설정할 수 있습니다.

+
+
+

Request Parameter

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No.PropertiesAttributeMandatoryParameter TypeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1연계 시스템 + 아이디System-IDYHeaderStringC60LD0001 +
2유저 아이디 + userId + YQueryStringknoxportal +
3메일 제목 + subject + YBodyString메일 제목입니다. +
4문서 + 타입docSecuTypeYBodyStringPERSONAL + 1) PERSONAL : 개인
2) OFFICIAL : + 공문
5메일 본문 + contents + YBodyString안녕하세요, 테스트 + 메일입니다.
6컨텐츠 + 타입contentTypeYBodyStringTEXT1) TEXT : 텍스트
2) MIME : + 마임
3) HTML : HTML
7발신인sender + YBodyJSON Object
8발신인 + 이메일emailAddressYBodyStringknoxportal@samsung.com + 1) 운영 환경 : knoxportal@samsung.com
2) 스테이지 환경 : knoxportal@stage.samsung.com
9수신인 + recipientsYBodyJSON List
10수신인 + 이메일emailAddress + YBodyStringknoxportal@samsung.com + 1) 운영 환경 : knoxportal@samsung.com
2) 스테이지 환경 : knoxportal@stage.samsung.com
11수신 + 타입recipientTypeYBodyStringTO + 1) 수신 : TO
2) 참조 : + CC
3) 비밀참조 : BCC
12첨부 + 파일attachmentsNBodymultipart/form-data + multipart/form-data로 변환된 바이너리 + 파일 및 파일명
13대외비 옵션 + drmOptionYJSON ObjectString
14대외비 메일 조회 가능 + 일 수validDaysYBodyString3
15대외비 개봉 가능 + 횟수useCount + YBodyString3
16대외비 수신인 조회 가능 + 여부canView + YBodyString0
17대외비 인쇄 가능 + 여부canPrint + YBodyString0
18대외비 + 외부 수신인의 개봉 알림 여부notifyExternalUser + YBodyString0 + +
19대외비 + 내부 수신인의 개봉 알림 여부notifyInternalUser + YBodyString0 + +
+
+
+
+

Response Parameter

+
+
+
+ + + + + + + + + + + + + + + + + +
PropertiesAttributeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
API 호출 성공 + 여부result + Stringsuccess
mailId + 메일 아이디 + String20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5 +
+
+
+
+

Sample

+
+
+
+ + + + + + + + + + + +
RequestResponse
+
+
+ + + + + + + + + + + +
/mail/api/v2.0/mails/send?userId=knoxportal
body :

Content-Disposition: form-data; name="mail"
{
   "subject" : + "EMAIL SUBJECT (이메일 제목)",
   "contents" : "EMAIL BODY (이메일 + 본문)",
   "contentType" : + "TEXT",
   "docSecuType" : + "PERSONAL",
   "sender" + :
      {
         "emailAddress" + : "knoxportal@samsung.com"
      },
   "recipients" :
      [
         {
            "emailAddress" + : "knoxportal@samsung.com",
            "recipientType" + : "TO"
         }
      ],
   "drmOption" :
      {
         "validDays":"3",
         "useCount":"3",
         "canView":"0",
         "canPrint":"0",
         "notifyExternalUser":"0",
         "notifyInternalUser":"0"
      }
}
Content-Disposition: form-data; + name="attachments"; filename="db변경.JPG"
Content-Type: image/jpeg
Content-Disposition: form-data; name="attachments"; filename="2 - + 복사본 (2).jpg"
Content-Type: + image/jpeg
{
   "mailId": + "20190531015540hdp_101d2782e07bbad98034606076da1e299b05",
   "result": "success"
}
+
+
+
Error Code
+
+
+ + + + + + + + + + + + + + + +
HTTP응답코드에러코드에러메시지조치방안
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
400ML1001필수값 중 입력되지 않은 값이 있습니다. + 모든 필수값이 + 입력되었는지 확인이 필요합니다. 또, 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.
400ML1002사용자 정보가 존재하지 않습니다.호출 시 입력하는 + URI 상의 Knox Id, 혹은 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.
400ML1101본문 (content) 값이 입력되지 + 않았습니다.메일 발신 관련 + API에서 본문 (content) 값이 정상적으로 입력되었는지 확인이 필요합니다.
400ML1107대외비/극비 보안 옵션 값이 유효하지 않습니다. 옵션 + 값을 확인해주세요.대외비/극비의 보안 + 옵션 설정 유효 값을 가이드를 통해 확인 후 입력이 필요합니다.
400ML1108대외비/극비 메일 contentType 값이 유효하지 + 않습니다.대외비/극비 메일에서 + contentType은 HTML과 TEXT 타입만 허용됩니다.
400ML1109대외비/극비 메일 docSecuType 값이 유효하지 + 않습니다.대외비/극비 메일의 + docSecuType은 CONFIDENTIAL(대외비), CONFIDENTIAL_STRICT(극비) 두 값만 허용됩니다.
400ML1110극비 메일일 경우에는 내부 수신인에게만 메일 발신이 + 가능합니다.외부 수신인 혹은 + 유효하지 않은 Knox 이메일 계정이 수신인에 포함되지 않았는지 확인이 필요합니다.
400ML1111대외비/극비 메일에서 허용되지 않는 첨부 파일의 + 확장자가 있습니다.txt, doc, + ppt, xls, pdf, jpg, jpeg, gif, bmp, docx, pptx, xlsx, mht, gul 확장자만 허용됩니다.
400ML1112메일 제목 크기가 300 bytes를 + 초과하였습니다.제목의 사이즈 확인이 + 필요합니다.
400ML1114메일 발신 API에서 허용되는 content 크기를 + 초과하였습니다.발신 API에서 본문 + 사이즈는 최대 1mb까지 입력이 가능합니다. 해당 크기를 초과하는 내용에 대해서는 가급적 첨부 파일 등을 이용 부탁드립니다.
400ML1117메일 발신 API에서 발신가능한 최대 수신인을 + 초과하였습니다.입력 가능한 최대 + 수신인 수는 100명입니다.
400ML1118수신자의 수신 타입이 잘못 설정되었습니다. + 수신 타입은 + TO(수신), CC(참조), BCC(비밀참조) 세 개의 값만 허용됩니다.
403ML1102첨부 파일 처리 중 에러가 발생했습니다. + 첨부 파일의 + Multipart/form-data 형식 확인이 필요합니다.
+
+

+
+
메일 발신 취소 +
+
+

/mail/api/v2.0/mails/{mailId}/cancel?userId=Knox아이디 +

+
+
+

Knox 사용자가 발신한 메일을, 수신자의 수신 메일함에서 삭제하는 + 기능입니다.
(주) Knox 외부로 보낸 메일에 대해서는 발신 취소가 + 불가능합니다.

+
+
+

Request Parameter

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No.PropertiesAttributeMandatoryParameter TypeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1연계 시스템 + 아이디System-IDYHeaderStringC60LD0001 +
2메일 아이디 + {mailId} + YPathString20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a + 발신된 모든 메일은 메일아이디라는 고유값을 가지며, 메일 발신이 성공하면 메일아이디를 전달받습니다. +
전달받은 메일아이디를 활용하여 발신취소 또는 수신상황 조회를 할 수 + 있습니다.
3유저 아이디 + userId + YQueryStringknoxportal +
4수신인 + recipientsYBodyString
+
+
+
+

Response Parameter

+
+
+
+ + + + + + + + + + + + + + + + + +
PropertiesAttributeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + +
API 호출 성공 + 여부result + Stringsuccess
+
+
+
+

Sample

+
+
+
+ + + + + + + + + + + +
RequestResponse
+
+
+ + + + + + + + + + + +
/mail/api/v2.0/mails/20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a/cancel?userId=knoxportal
Content-Type : application/json;
body :
{
   "recipients" : + ["sample.id@samsung.com","knoxportal@samsung.com"]
}
{
   "result": + "success"
}
+
+
+
Error Code
+
+
+ + + + + + + + + + + + + + + +
HTTP응답코드에러코드에러메시지조치방안
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
400ML1001필수값 중 입력되지 않은 값이 있습니다. + 모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.
400ML1002사용자 정보가 존재하지 않습니다.호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.
404ML1003요청하신 데이터가 존재하지 않습니다. + 호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.
+
+

+
+
메일 + 별 수신상태 조회
+
+

/mail/api/v2.0/mails/deliverystatus/count?userId=Knox아이디 +

+
+
+

전달받은 메일 ID 리스트에 대해서, 각각의 전체적인 수신상태를 조회할 수 + 있습니다.

+
+
+

Request Parameter

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No.PropertiesAttributeMandatoryParameter TypeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1연계 시스템 + 아이디System-IDYHeaderStringC60LD0001 +
2유저 아이디 + userId + YQueryStringknoxportal +
3메일 아이디 + 리스트mailIds + YBodyString20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a +
+
+
+
+

Response Parameter

+
+
+
+ + + + + + + + + + + + + + + + + +
PropertiesAttributeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
메일 아이디 + mailId + String20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5 +
전체 + 카운트totalStatusCount + int8 + +
배달중sendingCountint0
개봉 + openCountint1
미개봉 + unopenCountint7
기타 + etcCountint0
발신취소sendCancelCount + int0 +
발신취소 요청중 + sendCancelReqCount + int0 +
발신차단sendBlockCount + int0 +
발신실패sendFailCount + int0 +
대외비 + 변환중drmProcessCount + int0 +
대외비 변환 + 실패drmFailCountint0
예약 + reserveCountint0
예약 + 취소reserveCancelCount + int0 +
알수없음unknownCountint0
+
+
+
Error Code
+
+
+ + + + + + + + + + + + + + + +
HTTP응답코드에러코드에러메시지조치방안
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
400ML1001필수값 중 입력되지 않은 값이 있습니다. + 모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.
400ML1002사용자 정보가 존재하지 않습니다.호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.
404ML1003요청하신 데이터가 존재하지 않습니다. + 호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.
+
+

+
+
수신인 별 + 수신상태 조회
+
+

/mail/api/v2.0/mails/{mailId}/deliverystatus?userId=Knox아이디 +

+
+
+

전달받은 메일 ID에 대해서, 해당 메일의 수신인 별 수신 상태를 조회할 수 + 있습니다.

+
+
+

Request Parameter

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No.PropertiesAttributeMandatoryParameter TypeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1연계 시스템 + 아이디System-IDYHeaderStringC60LD0001 +
2메일 아이디 + {mailId} + YPathString20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a + 발신된 모든 메일은 메일아이디라는 고유값을 가지며, 메일 발신이 성공하면 메일아이디를 전달받습니다. +
전달받은 메일아이디를 활용하여 발신취소 또는 수신상황 조회를 할 수 + 있습니다.
3유저 아이디 + userId + YQueryStringknoxportal +
+
+
+
+

Response Parameter

+
+
+
+ + + + + + + + + + + + + + + + + +
PropertiesAttributeData TypeSample DataNote
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
이름nameStringKnoxPortal +
직급 + positionStringSenior + Engineer
영문 성명 + enName + StringKnoxPortal + ServiceDesk
영문 + 직급enPositionStringSenior + Engineer
회사명 + company + String삼성SDS
부서명 + departmentString사업그룹(Knox + Portal)
영문 + 부서명enDepartmentStringBusiness + Group
이메일 주소 + emailStringknoxportal@samsung.com
유저 ID + userID + Stringknoxportal +
수신타입recipientType + StringTO +
수신상태가 업데이트된 + 시간updateTimeCalendar{"month":6,"year":2019,"dayOfMonth":7,"hourOfDay":5,"minute":48,"second":16} +
개봉상태 + status + StringUNOPEN
수신자가 메일 + 개봉시 발신자에게 알림 여부needOpenNotify + booleanfalse
DL 메일주소 + 여부값isDLAddrbooleanfalse
+
+
+
Error Code
+
+
+ + + + + + + + + + + + + + + +
HTTP응답코드에러코드에러메시지조치방안
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
400ML1001필수값 중 입력되지 않은 값이 있습니다. + 모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.
400ML1002사용자 정보가 존재하지 않습니다.호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.
404ML1003요청하신 데이터가 존재하지 않습니다. + 호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.
+
+
+
\ No newline at end of file -- cgit v1.2.3