Compartilhar via


Recuperando propriedades MAPI

Aplica-se a: Outlook 2013 | Outlook 2016

Quando um cliente ou provedor de serviço recupera uma propriedade de um objeto, o objeto disponibiliza o valor, o tipo e o identificador da propriedade.

Clientes e provedores de serviços podem recuperar as propriedades de um objeto chamando um dos seguintes:

IMAPIProp::GetProps

IMAPIProp::OpenProperty

HrGetOneProp

O método GetProps é usado para recuperar uma ou mais propriedades que não precisam de uma interface especializada ou alternativa para acesso. Isso implica que as propriedades disponíveis com GetProps são pequenas, como inteiros e valores boolianos.

Para recuperar várias propriedades

  1. Aloque uma estrutura SPropTagArray grande o suficiente para manter o número de propriedades a serem recuperadas.

  2. Defina o membro cValues da estrutura SPropTagArray como o número de propriedades a serem recuperadas e defina cada membro aulPropTag como o identificador e digite, se possível, uma das propriedades de destino. Se o tipo for desconhecido, defina-o como PT_UNSPECIFIED. Se o tipo e o identificador forem desconhecidos, localize essas informações chamando IMAPIProp::GetPropList. GetPropList retorna uma matriz de marcas de propriedade com todas as propriedades com suporte do objeto. Se apenas um nome de propriedade estiver disponível, chame IMAPIProp::GetIDsFromNames para acessar o identificador associado.

  3. Chame IMAPIProp::GetProps para abrir a propriedade ou as propriedades.

O método OpenProperty é usado para abrir propriedades maiores que exigem uma interface alternativa, como IStream ou IMAPITable para acesso. OpenProperty normalmente é usado para abrir grandes propriedades de cadeia de caracteres, binárias e objeto e só pode abrir uma propriedade por vez. Os chamadores passam o identificador da interface adicional necessária como um dos parâmetros de entrada.

Alguns dos usos comuns do OpenProperty incluem abrir PR_BODY (PidTagBody), a propriedade que contém o corpo de uma mensagem baseada em texto, PR_ATTACH_DATA_OBJ (PidTagAttachDataObject), a propriedade que contém um objeto OLE ou anexo de mensagem e PR_CONTAINER_CONTENTS (PidTagContainerContents), a propriedade que contém uma tabela de conteúdo de contêiner de pasta ou catálogo de endereços.

Dependendo da propriedade, uma interface diferente é solicitada do OpenProperty. O IStream, uma interface que permite que os dados da propriedade sejam lidos e gravados como um fluxo de bytes, normalmente é usado para acessar PR_BODY. O IMessage ou o IStream podem ser usados para acessar PR_ATTACH_DATA_OBJ. Anexos de mensagem inseridos que são mensagens padrão usam IMessage , enquanto as mensagens no formato TNEF usam IStream. Como PR_CONTAINER_CONTENTS é um objeto de tabela, ele é acessado com IMAPITable.

Para recuperar a propriedade PR_ATTACH_DATA_BIN de um anexo

  1. Chame a função OpenStreamOnFile para abrir um fluxo para o arquivo.

  2. Chame o método IMAPIProp::OpenProperty da mensagem para recuperar a propriedade PR_ATTACH_DATA_BIN (PidTagAttachDataBinary) com a interface IStream . Defina os sinalizadores MAPI_MODIFY e MAPI_CREATE.

  3. Aloque uma estrutura STATSTG e passe-a em uma chamada para o método IStream::Stat do fluxo de arquivos para determinar seu tamanho. Outra maneira de determinar o tamanho do fluxo é chamar IStream::Seek com o sinalizador STREAM_SEEK_END.

  4. Chame o método IStream::CopyTo do fluxo para copiar os dados do fluxo do arquivo no fluxo de anexo.

  5. Quando a operação de cópia for concluída, libere ambos os fluxos chamando seus métodos IUnknown::Release .

Quando o IStream é usado para acesso à propriedade, alguns provedores de serviços enviam automaticamente o tamanho da propriedade de volta com o fluxo. Chamar OpenProperty com o sinalizador MAPI_DEFERRED_ERRORS pode atrasar a abertura da propriedade e o retorno do tamanho do fluxo. Se IStream::Stat for chamado para recuperar esse tamanho após OpenProperty com o conjunto de sinalizadores MAPI_DEFERRED_ERRORS, o desempenho será afetado porque essa sequência de chamadas força uma chamada de procedimento remoto extra. Para evitar o sucesso de desempenho, os clientes podem chamar qualquer método MAPI entre as chamadas para OpenProperty e para Stat.

A função HrGetOneProp , como OpenProperty, abre uma propriedade por vez. HrGetOneProp só deve ser usado quando o objeto de destino existir no computador local. Quando o objeto de destino não está disponível localmente, o uso de HrGetOneProp repetidamente pode resultar em várias chamadas de procedimento remoto e uma degradação de desempenho.

Os chamadores que precisam de várias propriedades podem chamar HrGetOneProp ou OpenProperty em um loop ou fazer uma chamada para GetProps. Chamar GetProps uma vez é mais eficiente.

Observação

As propriedades seguras não estão disponíveis automaticamente com outras propriedades em uma chamada GetProps, HrGetOneProp ou GetPropList . As propriedades seguras devem ser solicitadas explicitamente usando seus identificadores de propriedade.

Confira também

Visão geral da propriedade MAPI