2012-09-06 2 views
0

Exchange는 대상이 공용 폴더 인 경우 배달 못 함 보고서 (NDR)를 삭제합니다.공용 폴더에 대한 Exchange 2007 NDR

이 동작을 피하기 위해 전송 에이전트 (SMTPReceiveAgent, C#)를 작성하고 싶습니다. 목표는 NDR을 교환으로 삭제하지 않는 "일반"메일로 변경하는 것입니다. 나는 이것을 시험해보고 해결책을 찾지 못했다. 이제 도움이 필요해.

다음

몇 가지 질문 :

  1. 그것은 NDR을 쉽게 식별 할 수 있습니다.

    콘텐츠 유형 : multipart/report; report-type = delivery-status;

    그러나 나는 이것을 "normal"메일로 변환하기 위해 메일로 변경해야합니까? 부분/대안으로 변경 가 작동하지 않거나 충분하지 않습니다.

  2. 대신 NDR에서 캡처 한 모든 정보가 포함 된 새 메시지를 만들 수 있습니다. SMTReceiveAgents.OnSubmitted 이벤트에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

  3. 정상적인 사용자를 위해 공용 폴더 NDR에서 복사본을 만들려면 난 args.Mailitem.Recipients.Add(new RoutingAddress("[email protected]")) 을 EndOfDataHandler에서 시도했습니다. 이 doesnt 일. 왜?

답변, 요령 또는 해결책이 있습니까?

답변

0

Exchange 2007 NDRs to public Folders

Q1. multipart/alternative로 변경해야하지만 "Content-Type : message/delivery-status"를 찾아 text/plain으로 변경해야하지만 필요하지는 않습니다.

Q2. 이렇게 할 수는 있지만 "원본"메시지에 대한 유일한 옵션은 보낸 사람에게 거부하거나 격리하거나 허용하는 옵션입니다. 삭제/삭제 옵션이 없습니다.하지만 공용 폴더로 이동하기 때문에 폐기됩니다. .

이 경로는 다음 EndOfHeadersEvent 동안 헤더와 본문을 열거 한 다음 새은 MailMessage 객체를 생성 가서 원래

Q3에서 헤더 및 본문을 포함합니다. 그게 작동해야합니다 .. 내가 그것을 볼 수있는 유일한 이유는 일을 wouldnt 할 수 있습니다 당신이 외부의받는 사람에게/도메인 서버에서 허용되지 도메인을 보내려고하는 경우. 실제 외부 주소로 메일 연락처를 만든 다음 외부 연락처에 NDR을 참조해야합니다.

다음은 수행하려는 작업을 수행 할 수있는 코드입니다. 내가 onRcpt 및 onEndOfHeaders에 후크 이유는 입력받는 사람이 address..I 헤더

NDR Saved to Public Folder

void UserSendCounterSmtpReceiveAgent_OnRcptCommand(ReceiveCommandEventSource source, RcptCommandEventArgs e) 
     { 
      if(source == null || e == null) 
      { 
       return; 
      } 
      String recipient = e.RecipientAddress.ToString(); 
      if (recipient.Equals("[email protected]")) 
      { 
       this.testOnEndOfHeaders = true; 
      } 

     } 
     void UserSendCounterAgent_OnEndOfHeaders(ReceiveMessageEventSource source, EndOfHeadersEventArgs e) 
     { 
      if (source == null || e == null) 
      { 
       return; 
      } 

       if (testOnEndOfHeaders) 
       { 
        this.testOnEndOfHeaders = false; 
        Header obj = e.Headers.FindFirst("Content-Type"); 
        if (obj.Value.Equals(@"multipart/report")) 
        { 
         obj.Value = @"multipart/alternative"; 
         e.MailItem.Recipients.Add(new RoutingAddress("[email protected]")); 
        } 

       } 

     } 
의 끝에서 RCPT 목록을 열거하는 것보다 더 빨리 발견 공용 폴더가 있는지 확인하는 것입니다
관련 문제