Criar um anexo de mensagem
Aplica-se a: Outlook 2013 | Outlook 2016
Um anexo de mensagem é alguns dados adicionais, como um arquivo, outra mensagem ou um objeto OLE, que você pode enviar ou salvar junto com uma mensagem. Cada anexo tem uma coleção de propriedades que o identifica e descreve seu tipo e como ele é renderizado. Assim como os destinatários, os anexos de mensagens só podem ser acessados por meio da mensagem à qual pertencem. Portanto, para que um anexo seja utilizável, sua mensagem deve estar aberta.
Criar um anexo de mensagem
Chame o método IMessage::CreateAttach da mensagem e passe NULL como o identificador de interface. CreateAttach retorna um número que identifica exclusivamente o novo anexo dentro da mensagem. O número de anexo é armazenado na propriedade PR_ATTACH_NUM (PidTagAttachNumber) e é válido apenas desde que a mensagem que contém o anexo esteja aberta.
Chame IMAPIProp::SetProps para definir PR_ATTACH_METHOD (PidTagAttachMethod) para indicar como acessar o anexo. PR_ATTACH_METHOD é necessário. Defina como:
ATTACH_BY_VALUE se o anexo for dados binários.
ATTACH_BY_REFERENCE, ATTACH_BY_REF_RESOLVE ou ATTACH_BY_REF_ONLY se o anexo for um arquivo.
ATTACH_EMBEDDED_MSG se o anexo for uma mensagem.
ATTACH_OLE se o anexo for um objeto OLE.
Defina a propriedade de dados de anexo apropriada:
PR_ATTACH_DATA_BIN (PidTagAttachDataBinary) para dados binários e objetos OLE 1.
PR_ATTACH_PATHNAME (PidTagAttachPathname) para arquivos.
PR_ATTACH_DATA_OBJ (PidTagAttachDataObject) para mensagens e objetos OLE 2.
Defina PR_ATTACH_RENDERING (PidTagAttachRendering) para manter a representação gráfica do anexo para anexos de arquivo ou binários. Não defina para objetos OLE, que armazenam as informações de renderização internamente ou para mensagens anexadas.
Defina PR_RENDERING_POSITION (PidTagRenderingPosition) para indicar onde o anexo deve ser exibido. PR_RENDERING_POSITION se aplica apenas a clientes que definem a propriedade PR_BODY . Se você só dá suporte a PR_RTF_COMPRESSED, coloque as seguintes informações de espaço reservado no fluxo compactado:
\objattph
Para definir PR_RENDERING_POSITION, atribua um número que representa um deslocamento ordinal em caracteres, com o primeiro caractere de PR_BODY sendo 0, se você precisar saber onde na mensagem o anexo é renderizado ou 0xFFFFFFFF, se você não renderizar anexos no PR_BODY.
Defina PR_ATTACH_FILENAME (PidTagAttachFilename) para indicar o nome curto do arquivo para um anexo de arquivo e PR_ATTACH_LONG_FILENAME (PidTagAttachLongFilename) para indicar o nome do arquivo com suporte em uma plataforma que manipula o formato de nome de arquivo longo. Ambas as propriedades são opcionais. No entanto, se você definir PR_ATTACH_LONG_FILENAME, também defina PR_ATTACH_FILENAME.
Defina PR_DISPLAY_NAME (PidTagDisplayName) para indicar o nome do anexo que pode aparecer em uma caixa de diálogo. PR_DISPLAY_NAME é opcional.
Definir PR_ATTACH_DATA_BIN
Chame IMAPIProp::OpenProperty para abrir a propriedade com a interface IStream .
Se um arquivo contiver os dados e estiver aberto ou se você precisar de controle explícito sobre o tamanho do buffer, chame IStream::Write em um loop para colocar os dados no fluxo.
Outra opção é chamar OpenStreamOnFile para criar um fluxo para acessar o arquivo de dados e, em seguida, chamar o método IStream::CopyTo desse fluxo para copiar os dados para o fluxo retornado pelo OpenProperty.
Chame o método IStream::Commit do novo fluxo.
Definir PR_ATTACH_DATA_OBJ
Chame IMAPIProp::OpenProperty para abrir a propriedade com a interface IStreamDocfile para criar um fluxo que funcione com armazenamento estruturado. O IStreamDocfile é implementado por provedores de repositório de mensagens para fornecer aos clientes uma maneira de maior desempenho para armazenar e recuperar o armazenamento estruturado. A interface IStreamDocfile é a mesma que iStream, mas o conteúdo do fluxo é garantido para ser formatado como armazenamento estruturado. Se essa chamada for bem-sucedida, crie o fluxo com as mesmas etapas descritas para definir PR_ATTACH_DATA_BIN.
Se OpenProperty falhar:
Chame OpenProperty novamente pedindo IStorage.
Chame StgOpenStorage para abrir o objeto OLE e retornar um objeto de armazenamento.
Chame o método IStorage::CopyTo do objeto de armazenamento retornado para copiar para o objeto de armazenamento retornado do OpenProperty.
Chame o método IStorage::Commit do novo objeto de armazenamento.
Definir PR_ATTACH_PATHNAME
Alocar uma estrutura SPropValue , definindo o membro ulPropTag como PR_ATTACH_PATHNAME e o membro Value.LPSZ para a cadeia de caracteres que representa o nome do arquivo.
Chame o método IMAPIProp::SetProps do anexo.
Observação
Se sua plataforma for compatível com nomes de arquivo longos, defina PR_ATTACH_PATHNAME e PR_ATTACH_LONG_PATHNAME. Talvez seja necessário fazer uma chamada do sistema operacional para recuperar o nome de arquivo curto.