2013-05-30 5 views
1

Ссылка: Перспективы 2013 Windows 8Получение пользовательского значения свойства из полученной почты с использованием GetProperty (который был установлен с помощью SetProperty в Outlook, VBA)

Я установил пользовательское свойство на исходящей почты с помощью SetProperty. Я могу видеть это свойство и его значение в заголовке интернет-сообщения после получения почты на другой машине. Я не могу получить значение этого свойства с помощью GetProperty, хотя свойство и связанное с ним значение существуют в полученной почте.

Свойство устанавливается с помощью кода ниже:

Const SchemaPrefix As String = "http://schemas.microsoft.com/mapi/string/" 
Const SchemaCode As String = "{00020386-0000-0000-C000-000000000046}/ABC-ID" 

Dim pa As Outlook.PropertyAccessor 

Dim ID_Schema As String 
Dim ID_Value As String 

ID_Schema = SchemaPrefix & SchemaCode 
ID_Value = "12345" 

Set pa = item.PropertyAccessor 
pa.SetProperty ID_Schema, ID_Value 

В почте, полученной на другой машине, я могу видеть, что заголовок интернет Мессажер содержит:

ABC-ID: 12345 

Однако следующее код сбой и возвращает ошибку - Свойство «http://schemas.microsoft.com/mapi/string/ {00020386-0000-0000-C000-000000000046}/ABC-ID" неизвестно или не может быть найдено.
Ошибка происходит на последней строке: pa.GetProperty (ID_Schema)

Const SchemaPrefix As String = "http://schemas.microsoft.com/mapi/string/" 
Const SchemaCode As String = "{00020386-0000-0000-C000-000000000046}/ABC-ID" 

Dim pa As Outlook.PropertyAccessor 
Dim ID_Schema As String 
Dim objFolder As Folder 

ID_Schema = SchemaPrefix & SchemaCode 

Set objFolder = Outlook.ActiveExplorer.CurrentFolder 
Set pa = objFolder.Items.item(1).PropertyAccessor 
MsgBox pa.GetProperty(ID_Schema) 

В папке тест, есть только один адрес электронной почты ... и я могу вручную проверить наличие настраиваемого свойства и его значение, заданное на отправляющей машине

Обнаружили несколько ссылок в Интернете о том, как установить свойство ... но нет способа получить значение свойства. Руководство будет высоко оценено.

ответ

1

Пользовательское свойство MIME не будет автоматически передаваться в свойство MAPI с именем из заголовка MIME. Exchange используется для этого, но не более того - поскольку у вас может быть не более 0xFFFF уникальных именованных свойств, это хороший канал отказа в обслуживании: просто отправьте сообщение с несколькими тысячами x-заголовков в почтовый ящик, и вы будете постоянно поджаривать его ,

Если вы видите пользовательские X-заголовок в PR_TRANPORT_MESSAGE_HEADERS (используйте OutlookSpy и посмотреть на сообщение, чтобы увидеть, что и все другие свойства MAPI - нажмите кнопку IMessage), вы можете прочитать заголовки MIME и программно извлечь пользовательский заголовок. PR_TRANPORT_MESSAGE_HEADERS можно получить с помощью MailItem.PropertyAccessor, его имя DASL - http://schemas.microsoft.com/mapi/proptag/0x007D001F.

+0

Спасибо, сэр! Ваше подтверждение проблемы и ваше предлагаемое решение (и так быстро!) Наиболее ценятся. я был немного скинули на пост ниже: http://stackoverflow.com/questions/15197356/keep-outlook-mailitem-property-internet-header-from-being-removed-when-forward который заявляет, что автор может получить идентификатор, установленный с помощью GetProperty! Еще раз большое спасибо! –

+0

GetProperty будет работать, если свойство уже было отображено в целевом почтовом ящике - таким образом Exchange/Outlook будет продвигать заголовок X в свойство MAPI. –