我想访问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
答案 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}}