2016-10-04 2 views
0

Outlook 2010의 전자 메일 헤더에 액세스하려고합니다. 아래 코드를 사용하지만 불행히도 결과에는 헤더의 처음 252 자만 포함됩니다. 내가 뭘 잘못하고 있는지에 대한 제안은?VBA를 사용하여 잘린 Outlook 전자 메일 머리글

Dim strHeader As String 
strHeader = GetInetHeaders(olItem) 
MsgBox "Truncated string: " & strHeader 

Function GetInetHeaders(olkMsg As Outlook.MailItem) As String 
    ' Purpose: Returns the internet headers of a message.' 
    ' Written: 4/28/2009' 
    ' Author: BlueDevilFan' 
    ' Outlook: 2007' 
    Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E" 
    Dim olkPA As Outlook.PropertyAccessor 
    Set olkPA = olkMsg.PropertyAccessor 
    GetInetHeaders = olkPA.GetProperty(PR_TRANSPORT_MESSAGE_HEADERS) 
    Set olkPA = Nothing 
End Function 

답변

0

Msgbox는 잘림을 증명하는 좋은 방법이 아닙니다. 텍스트는 합법적으로 잘릴 수 있습니다.

메일 항목의 텍스트가 잘리지 않는 것처럼 보입니다. 적어도 나는 정보를 알 수 없다.

Private Sub Test_GetInetHeaders() 

Dim olNewmail As mailItem 
Dim strHeader As String 
Dim olItem As mailItem 

Set olItem = ActiveInspector.currentItem 
strHeader = GetInetHeaders(olItem) 

Set olNewmail = CreateItem(olMailItem) 
olNewmail.body = strHeader 
olNewmail.Display 

MsgBox "Truncated string if limit exceeded: " & strHeader 

ExitRoutine: 
    Set olItem = Nothing 
    Set olNewmail = Nothing 

End Sub 

Function GetInetHeaders(olkMsg As outlook.mailItem) As String 
    ' Purpose: Returns the internet headers of a message.' 
    ' Written: 4/28/2009' 
    ' Author: BlueDevilFan' 
    ' Outlook: 2007' 
    Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E" 
    Dim olkPA As outlook.propertyAccessor 
    Set olkPA = olkMsg.propertyAccessor 
    GetInetHeaders = olkPA.GetProperty(PR_TRANSPORT_MESSAGE_HEADERS) 
    Set olkPA = Nothing 
End Function 
+0

제거를 예상하여 응답 게시물에서 복사 "변수를 252 자로 트렁킹하는 디버그 기능을 사용했습니다. @niton에서 설명한 방법을 사용하면이 기능이 Outlook 2010"Jofre – niton

0

PropertyAccessor에 클래스는 몇 가지 제한 사항이 있습니다. 그 중 하나는 정보 저장소 유형에 따라 문자열 속성의 크기가 제한된다는 것입니다. OOM에서 도입 한 제한없이 속성을 읽으려면 저급 API - 확장 MAPI를 사용해야합니다. IMAPIProp 인터페이스의 OpenProperty 메서드는 속성에 액세스하는 데 사용할 수있는 인터페이스에 대한 포인터를 반환합니다. 다음은 MSDN 라이브러리 상태입니다.

IMAPIProp :: OpenProperty 메서드는 특정 인터페이스를 통해 속성에 대한 액세스를 제공합니다. OpenProperty는 IMAPIProp :: GetProps 및 IMAPIProp :: SetProps 메서드 대신 사용할 수 있습니다. 속성이 너무 크거나 너무 복잡해서 GetProps 또는 SetProps가 실패하면 OpenProperty를 호출하십시오.

또는 확장 MAPI (예 : 보너스)와 관련하여 타사 래퍼를 사용하는 것이 좋습니다.

+0

나의 이해는 확장 MAPI 당신이 보낸 예는 C에 ++ 가능하면 VBA를 사용하고자하는 아웃룩 2010에서 사용할 수 없습니다 CDO 필요한 것이 었습니다. – Jofre

+0

확장 MAPI는 Outlook에서 사용되는 기본 API입니다. C++ 또는 Delphi를 사용해야합니다. CDO 1.21은 VBA를 비롯한 모든 언어에서 사용할 수있는 확장 MAPI에 대한 래퍼입니다. Microsoft는 더 이상 CDO 1.21을 지원하거나 배포하지 않습니다. 구속은 CDO 1.21과 유사하며 (더 많은 기능을 포함 함) 모든 언어에서 사용할 수 있습니다. –

관련 문제