프리지아 랩

이 글은 다음과 같은 환경에서 Exchange 서버의 Hub Transport 계층에서 동작하는 TransportAgent를 개발하는 과정을 소개합니다. 여기서 소개하는 에이전트 모듈은 간단히 메일 제목 앞에 설정 문구를 삽입하는 기능을 합니다.

 

 Exchnage Server 2010

 Viusal Studio 2008

 

1. 먼저 Visual Studio 2008에서 클래스 라이브러리를 위한 새로운 프로젝트를 생성합니다.

 

2. Exchange Server에서 제공하는 오픈 API 참조를 추가하기 위해 다음 두 가지 dll 파일과 관련 xml 파일을 앞서 만든 프로젝트의 솔루션 파일에 복사합니다.

  • Program Files\Microsoft\Exchange Server\V14\Public\Microsoft.Exchange.Data.Common.dll
  • Program Files\Microsoft\Exchange Server\V14\Public\Microsoft.Exchange.Data.Transport.dll

 

3. Visual Studio 솔루션 탐색기에서 앞서 복사한 dll 파일을 참조로 추가합니다.

 

 

4. 프로젝트에 만들어진 클래스 파일을 열고 아래 그림과 같이 ⑴ 참조를 선언한 뒤 ⑵RoutingAgentFactory를 상속합니다.

 

 

5. 메일 제목을 수정하도록 코드를 작성합니다. 이를 위해 다음과 같은 스텝으로 진행합니다.

ⓐ OnCategorizedMessageHandler를 추가합니다.

ⓑ 모든 메일의 제목에 특정 메시지를 추가하는 코드를 다음 처럼 작성합니다.

ⓒ 이제 솔루션을  빌드합니다.

 

ⓓ 생성된 클래스 라이브러리를 확인합니다.

6. 클래스 라이브러리가 정상적으로 생성되었다면, 이제 다음의 단계를 따라 Agent를 등록하고 동작을 확인해봅니다. 다음의 명령들은 Exchange Management Shell에서 수행하도록 합니다.

 

ⓐ TransportAgent 서비스 중지

-  Net Stop MSExchangeTransport

 

ⓑ 앞서 만든 dll 파일을 Exchange Server에 등록합니다. 이 때 다음의 옵션 값들을 적용합니다.

- Name: dll 파일에 나타나는 TransportAgent의 ID 값

- TransportAgentFactory: 소스의 Namespace와 Class 명

- AssemblyPath: 실제 dll 파일의 경로

 

ⓒ 처음 등록시 Agent의 Enabled 값이 false 인 것을 활성화 합니다.

- Enable-TransportAgent -Identity “ClassLibrary_01“

 

ⓓ TransportAGent 서비스를 시작합니다.

- Net Start MSExchangeTransport

 

ⓔ 등록한 TransportAgent의 우선순위를 1로 변경합니다.

- Set-TransportAgent -Identity "ClassLibrary_01”–Priority 1

 

※ 참고 자료

Comment +1

  • 초보자 2016.10.31 15:37 신고

    안녕하세요
    예제소스로 테스트 진행중인데
    이중화 구성에서 수신 시에만 적용하고 싶은데
    방법 문의합니다


이 샘플은 Exchange Server 2010의 EWS를 이용해 개인의 일정을 접근해 특정 기간의 일정 건수를 가져오는 부분을 설명한다.

 

1. 네임스페이스 Microsoft.Exchange.WebServices.Data 참조 설정. 

à 해당 참조 라이브러리는 Exchange Ews Managed Api 1.0 을 다운로드 후 개발 환경에 설치.
 Exchange Ews Managed Api 1.0 다운로드 경로

2. 현재 Excahgne 웹서버의 exchange web serivce 경로로 다음과 같은 SSL 경로 (예를 들면, "https://email.contoso.com/ews/Exchange.asmx”)를 사용한다. 

 

es.Url = new Uri(https://email.contoso.com/ews/Exchange.asmx);

 

3. 기본적으로 IIS 의 인증에 종속되어 있으므로 위 Exchange 웹 서비스 IIS기본 인증상태다.

Userid는 사용자의 아이디 , pUserPWD는 패스워드 , pDomain 는 도메인 정보를 넘긴다.

es.Credentials = new NetworkCredential(pUserID, pUserPWD, pDomain);

 

4. 전체 코드

using Microsoft.Exchange.WebServices.Data;

using System.Net;

.

 

namespace UC.WebApp.Mail.xEmail

{

    public partial class Get_ScheduleCount : xMailBase

    {

        public string schedule_Count = "0";   

 

        protected void Page_Load(object sender, EventArgs e)

{      

        ExchangeService es = new ExchangeService(ExchangeVersion.Exchange2010);

        es.Credentials = new NetworkCredential(pUserID, pUserPWD, pDomain);

        es.Url = new Uri(https://email.contoso.com/ews/Exchange.asmx);

 

CalendarFolder myCalendar = CalendarFolder.Bind(es,WellKnownFolderName.Calendar);

               

FindItemsResults<Appointment> myAppointments = myCalendar.FindAppointments(new CalendarView(DateTime.Today , (DateTime.Today.AddDays(1))));

                schedule_Count = myAppointments.Items.Count.ToString();

}

    }

}

※ Exchange Webservice와 SOAP

Exchange 웹서비스는 다른 웹서비스와 마찬가지로 SOAP 기반이므로, SOAP 사용시 XML이 전송된다. 다음은 일정의 저장을 처리하는 Save 메서드를 호출할 때 전송되는 XML 형식의 샘플이다.

관련 MSDN 사이트

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 

               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"

               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

   <soap:Header>

      <t:RequestServerVersion Version="Exchange2010" />

   </soap:Header>

   <soap:Body>

      <m:CreateItem SendMeetingInvitations="SendToNone">

         <m:Items>

            <t:CalendarItem>

               <t:Subject>Dentist Appointment</t:Subject>

               <t:Body BodyType="Text">The appointment is with Dr. Smith.</t:Body>

               <t:Start>2009-03-02T17:00:00Z</t:Start>

               <t:End>2009-03-02T19:00:00Z</t:End>

            </t:CalendarItem>

         </m:Items>

      </m:CreateItem>



Comment +0

 
▒ 개발 요구사항


코드 작성을 통해 아웃룩 2007에서 자동 보관 경로를 찾아서 변경. 
 


▨ 솔루션

자동 보관 파일의 위치는 레지스트리에서 이진 값으로 로컬 머신에 저장되어 있다.
아웃룩 2007의 경우, 위치는 아래와 같다.

  • HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\ <Outlook Profile Name> \0a0d020000000000c000000000000046
  • 001f0324 --> 이진 값으로 관리 (절대 경로)
     
      


 API를 통해 변경할 수 없고, 레지스트리의 ASCII 값을 단순히 액세스하는 방식으로 변경할 수 있다.
관련 샘플 코드는 다음과 같다.

더보기


▩ 추가 정보


1. Individual AutoArchive settings not stored in registry

http://support.microsoft.com/kb/198479

2. How to set the location of an archive .pst file in Outlook

http://support.microsoft.com/kb/836755/



Comment +0