= 메일

=== Knox REST API 연계 서비스 신청
Knox REST API 연계 서비스 신청은 <<_knox_rest_api_연계_서비스_신청,Knox REST API 연계 서비스 신청>> 항목을 참조한다.

=== Knox메일 연계 설정
Knox REST API 연계 서비스 신청이 되었다면, 발급받은 `system-id`, `token` 값을 설정한다. 

.knox.properties (스테이지)
[source,properties]
----
knox.system-id=xxxxxxxxxxx
knox.token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
knox.address.prefix=openapi.samsung.net
knox.mail-service=/mail/api/v2.0
----

.knox.properties (운영)
[source,properties]
----
knox.system-id=xxxxxxxxxxx
knox.token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   // <1>
knox.address.prefix=openapi.samsung.net,openapi.w1.samsung.net,openapi.w2.samsung.net   # <2>
knox.mail-service=/mail/api/v2.0
----
<1> 토큰 (comma(,)로 구분, 거점 순서와 동일)
<2> 거점 (국내, 구주, 미주)

=== KnoxMailService
Knox REST API 연계를 통해서 메일발신, 상태조회등을 하는 서비스로 주요 메서드는 KnoxMailService 인터페이스에 정의되어 있다.

KnoxMailService는 시스템에서 Knox 메일 서비스와 연계할 때 필요한 API들을 제공한다.

[source, java]
----
public interface KnoxMailService {
    /**
     * Knox 메일 발신
     * @param sendMail 발신 메일 정보 (첨부파일정보(AttachFile) 포함)
     * @return Knox 메일 아이디
     */
    String sendMail(SendMail sendMail);
    
    /**
     * Knox 메일 발신
     * @param sendMail 발신 메일 정보
     * @param attachResources 메일 첨부가 파일 리소스일 경우
     * @return Knox 메일 아이디
     */
    String sendMail(SendMail sendMail, List<Resource> attachResources);
    
    /**
     * Knox 메일별 수신상태 조회
     * @param mailIds Knox 메일 아이디 리스트
     * @param sendMail 메일 정보
     * @return Knox 메일 상태
     */
    MailStatus[] getDeliveryStatusCount(List<String> mailIds, SendMail sendMail);
    
    /**
     * Knox 메일 수신인별 수신상태 조회
     * @param mailId Knox 메일 아이디
     * @param sendMail 메일 정보
     * @return Knox 메일 수신인별 수신상태 정보
     */
    Recipient[] getDeliveryStatus(String mailId, SendMail sendMail);
}    
----

각각의 구현 메서드들은 Knox Rest 연계 서비스에서 요구하는 가이드대로 REST 형식을 갖추어 필요한 로직들을 수행한다.

자세한 API 스펙은 Swagger API 문서의 knox-mail-controller 항목을 참고한다. +
메일 발송 샘플 코드는 MailSampleController 소스코드를 참고한다.

IMPORTANT: Knox 연계 메일 발송을 위해서는 발신자/수신자 모두 Knox 계정이 존재해야만 테스트가 가능하다.
