截断使用VBA检索的Outlook电子邮件标头

时间:2016-10-04 08:59:14

标签: vba email outlook outlook-vba outlook-2010

我想访问Outlook 2010中的电子邮件标头。 我使用下面的代码但不幸的是结果只包含标题的前252个字符。关于我做错了什么的任何建议?

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

2 个答案:

答案 0 :(得分:0)

PropertyAccessor类有一些限制。其中之一是字符串属性的大小有限,具体取决于信息存储类型。您需要使用低级API - 扩展MAPI来读取属性,而不受OOM引入的限制。 IMAPIProp接口的OpenProperty方法返回指向可用于访问属性的接口的指针。这是MSDN库声明的内容:

  

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

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

答案 1 :(得分:0)

Msgbox不是证明截断的好方法。文本可以被合法地截断。

mailitem中的文字似乎没有被截断。至少我没有注意到切断信息。

{{1}}