Outlook 버전 전체에서 "보낸 사람" 이메일 주소를 일관되게 검색합니다.

StackOverflow https://stackoverflow.com/questions/112227

  •  02-07-2019
  •  | 
  •  

문제

저는 문서를 보낸 다음 다시 보낼 때 Outlook에서 가져오는 독립 실행형 C# 데스크톱 응용 프로그램을 작업하고 있습니다.응용 프로그램은 지정된 폴더에서 이메일을 선택하여 처리한 다음 보낸 사람 이름과 기타 항목을 데이터베이스에 저장합니다.

이는 SenderEmailAddress 속성이 있는 Outlook 2003 및 2007에 적합합니다.그러나 Outlook 2000 및 XP에는 이 속성이 없으며 지속적으로 name@domain.com을 반환하지 않습니다.이 버전에 대한 지원을 제공하고 있습니다.

Outlook Redemption이라는 라이브러리가 이 문제를 해결한다는 것을 알았지만 저는 .net에서 개발 중이고 고객 레지스트리에 쓰는 것을 정말로 피하고 싶습니다.또한 MAPI33이 MAPI 주변의 .Net 래퍼라는 것을 알았지만 포럼에서는 아직 지원되는지 여부가 불분명합니다.

Redemption dll에 대한 .Net 대안이나 Outlook 버전 전체에서 전자 메일 주소를 일관되게 검색할 수 있는 접근 방식에 대한 조언을 주시면 감사하겠습니다.

많은 감사

AbsFabs

발문:결국 이 기사의 솔루션을 사용하게 되었습니다. http://support.microsoft.com/kb/324530.답장을 생성한 후 생성된 메일항목의 주소로 답장을 추출하는 작업으로 구성되었습니다.인터넷을 통해 전송된 이메일에 잘 작동했으며 현재 Exchange Server 테스트를 진행 중입니다.

여행 중에도 이걸 발견했어요 http://anoriginidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of-an-exchange-sender-of-a-mailitem-from-outlook-in-vbnet-vsto/ 터치가 관련된 것 같습니다.기존 구현이 테스트에서 살아남지 못하는 경우 이는 계획 B를 구성할 수 있습니다.

피드백을 보내주셔서 감사합니다.

AbsFabs

나는 결국 Redemption을 사용하게 되었습니다.작업을 위한 훌륭한 도구입니다.내 문제는 내 앱이 설치될 때 dll을 등록해야 한다는 것이었습니다.내 앱은 dotnet으로 작성되었으므로 아무 것도 등록할 필요가 없습니다.레지스트리가 없는 COM을 사용하여 dll 등록 문제를 해결할 수 있었습니다.

영감을 주셔서 감사합니다.

도움이 되었습니까?

해결책

C# 프로덕션 코드에서 Outlook Redemption 솔루션을 사용하고 있습니다.그것은 아름답게 작동합니다.이를 통해 메일 메시지(IRDOMail)의 SenderID를 얻을 수 있으며 여기에서 IRDOSession 개체의 GetAddressEntryFromID() 메서드를 사용할 수 있습니다.

다른 팁

직장에서 비슷한 문제가 발생하는 동안 우리는 netMAPI 경로를 사용하기로 결정했는데 이로 인해 몇 가지 문제가 발생했습니다.

주된 문제는 MAPI가 자체 메모리를 관리한다는 것입니다. .NET도 마찬가지입니다. 즉, 때때로(약 300명의 사람들이 사내 소프트웨어를 사용하고 있음) 이로 인해 응용 프로그램이 중단되고 Windows '오류 보고' 대화 상자가 생성됩니다. 우리 자신의 버그 추적 대화 상자.이는 두 개가 서로의 메모리 힙을 덮어쓰기 때문에 발생했습니다.

교환 서버를 사용해야 하기 때문에 몇 가지 조사를 한 결과 VB6 앱에서 MAPI 코드를 작성하면 자체 메모리 공간이 있으므로 .NET 힙을 덮어쓰지 않는다는 사실을 발견했습니다.

이는 다소 시간이 많이 걸리는 작업 방식이지만 지금까지 아무런 문제가 없었으며 매일 수백 (수천은 아닐지라도)의 이메일이 우리 직원들에 의해 전송됩니다.

좋은 소식은 올바른 인터페이스를 추적하면서 올바른 방향으로 가고 있다는 것입니다.나쁜 소식은 2000과 XP가 .NET 이전 버전이었고 2003에서만 COM을 .NET에서 작동시키려는 노력이 있었기 때문에 .NET에서 지원이 매우 부족하다는 것입니다.

이러한 버전 2000 및 XP에 대한 솔루션은 올바른 COM 인터페이스를 추적하고 이를 자체적으로 래핑하는 것으로 구성됩니다.나는 이 버전의 Outlook에 대해 이 작업을 여러 번 수행해야 했지만 결코 좋지 않았습니다.행운을 빕니다.

Redemption은 레지스트리에 설치하지 않고도 사용할 수 있습니다. RedemptionLoader C#, VB.Net, Delphi 및 C++에서.

//tell the app where the 32 and 64 bit dlls are located
//by default, they are assumed to be in the same folder as the current assembly and be named 
//Redemption.dll and Redemption64.dll.  
//In that case, you do not need to set the two properties below
RedemptionLoader.DllLocation64Bit = @"c:\SourceCode\Redemption\redemption64.dll";
RedemptionLoader.DllLocation32Bit = @"c:\SourceCode\Redemption\redemption.dll";
//Create a Redemption object and use it
RDOSession session =  RedemptionLoader.new_RDOSession();
session.Logon(Missing.Value, Missing.Value,  Missing.Value, Missing.Value, Missing.Value,  Missing.Value);

실제로 사용해본 적은 없지만 Outlook을 사용해 볼 수 있습니다. 협업 데이터 개체 (CDO).예전에는 Outlook과 함께 설치할 수 있는 추가 기능이었지만 이제는 별도로 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top