2016-10-04 44 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不是验证截断的好方法。文本可以被合法地截断。

mailitem中的文本看起来并未被截断。至少我没有注意到切断信息。

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接口有一定的局限性。其中之一是字符串属性的大小取决于信息存储类型的大小。您需要使用低级API - 扩展MAPI来读取属性,而不受OOM引入的限制。 IMAPIProp接口的OpenProperty方法返回一个指向可用于访问属性的接口的指针。以下是MSDN库指出的内容:

IMAPIProp :: OpenProperty方法通过特定接口提供对属性的访问。 OpenProperty是IMAPIProp :: GetProps和IMAPIProp :: SetProps方法的替代方法。当GetProps或SetProps因属性太大或太复杂而失败时,请调用OpenProperty。

或者您可能会考虑在扩展MAPI(例如Redemption)周围使用第三方包装器。

+0

我的理解是扩展MAPI需要在Outlook 2010中不可用的CDO。您发送的示例是使用C++并希望在可能的情况下使用VBA。 – Jofre

+0

扩展MAPI是Outlook使用的本机API。您将需要使用C++或Delphi来使用它。 CDO 1.21是一个扩展MAPI的包装,可用于包括VBA在内的任何语言。 Microsoft不再支持或分发CDO 1.21。兑换类似于CDO 1.21(具有更多功能)并且可以从任何语言使用。 –

相关问题