Criar texto da mensagem
Aplica-se a: Outlook 2013 | Outlook 2016
Embora algumas mensagens sejam compostas de nada mais do que uma lista de destinatários e uma linha de assunto, o conteúdo da maioria das mensagens, especificamente IPM. Observação de mensagens, inclui texto. O texto da mensagem pode ser simples ou formatado e é armazenado em três propriedades: PR_BODY (PidTagBody), PR_HTML (PidTagHtml) e PR_RTF_COMPRESSED (PidTagRtfCompressed).
Se o cliente for baseado em texto simples, defina PR_BODY. Se você dá suporte ao texto formatado no RTF (Rich Text Format), defina apenas PR_RTF_COMPRESSED ou PR_RTF_COMPRESSED e PR_BODY, dependendo do provedor do repositório de mensagens que você está usando. Quando um cliente com reconhecimento RTF estiver usando um repositório de mensagens com reconhecimento RTF, ele define apenas PR_RTF_COMPRESSED . Quando um cliente com reconhecimento RTF está usando um repositório de mensagens sem reconhecimento RTF, ele define ambas as propriedades. Se o cliente for compatível com HTML, defina a propriedade PR_HTML .
Determinar se o repositório de mensagens dá suporte ao Rich Text Format
Chame o método IMAPIProp::GetProps do repositório de mensagens para recuperar a propriedade PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask).
Verifique a STORE_RTF_OK bit. Se STORE_RTF_OK estiver definido, o provedor do repositório de mensagens será compatível com o texto RTF. Se ele não estiver definido, o provedor do repositório de mensagens será compatível apenas com texto simples.
Determinar se o repositório de mensagens dá suporte a HTML
Chame o método IMAPIProp::GetProps do repositório de mensagens para recuperar a propriedade PR_STORE_SUPPORT_MASK .
Verifique a STORE_HTML_OK bit. Se STORE_HTML_OK estiver definido, o provedor do repositório de mensagens será compatível com texto HTML.
Definir PR_RTF_COMPRESSED
Chame o método IMAPIProp::OpenProperty da mensagem para abrir a propriedade PR_RTF_COMPRESSED , especificando IID_IStream como o identificador de interface e definindo o sinalizador MAPI_CREATE.
Chame a função WrapCompressedRTFStream , passando o sinalizador STORE_UNCOMPRESSED_RTF se o bit STORE_UNCOMPRESSED_RTF estiver definido na propriedade PR_STORE_SUPPORT_MASK do repositório de mensagens.
Libere o fluxo original chamando seu método IUnknown::Release .
Chame IStream::Write ou IStream::CopyTo para gravar o texto da mensagem no fluxo retornado de WrapCompressedRTFStream.
Chame os métodos Commit e Release no fluxo retornado do método OpenProperty .
Neste ponto, se o provedor do repositório de mensagens der suporte ao RTF, você terá feito tudo o que é necessário. Você pode depender do provedor do repositório de mensagens para lidar com a sincronização do conteúdo e da formatação da mensagem e para criar a propriedade PR_BODY , se necessário. Os repositórios de mensagens com reconhecimento RTF chamam RTFSync para lidar com a sincronização. Se o sinalizador RTF_SYNC_BODY_CHANGED estiver definido como TRUE, o provedor recomputará a propriedade PR_BODY .
Se o provedor do repositório de mensagens não for compatível com RTF, você também deverá adicionar conteúdo de mensagem não RTF definindo a propriedade PR_BODY .
Definir PR_HTML
Chame o método IMAPIProp::OpenProperty para abrir a propriedade PR_HTML com a interface IStream .
Chame IStream::Write para gravar os dados de texto da mensagem no fluxo retornado do OpenProperty.
Chame IStream::Commit e IUnknown::Release no fluxo para confirmar as alterações e liberar sua memória.
Definir PR_BODY
Chame o método IMAPIProp::OpenProperty para abrir a propriedade PR_BODY com a interface IStream .
Chame IStream::Write para gravar os dados de texto da mensagem no fluxo retornado do OpenProperty.
Chame a função RTFSync para sincronizar o texto com a formatação. Como essa é uma nova mensagem, defina os sinalizadores RTF_SYNC_RTF_CHANGED e RTF_SYNC_BODY_CHANGED para indicar que a versão de texto simples e RTF do texto da mensagem foi alterada. O RTFSync definirá várias propriedades relacionadas que o provedor do repositório de mensagens exige, como PR_RTF_IN_SYNC (PidTagRtfInSync) e as gravará na mensagem.
Chame IStream::Commit e IUnknown::Release no fluxo para confirmar as alterações e liberar sua memória.