Como faço para acessar um anexo de e-mail Outlook em C # sem salvá-lo para um novo local?
-
05-07-2019 - |
Pergunta
Eu estou usando Microsoft.Office.Interop.Outlook
em C # para acessar uma caixa de correio e encontrar mensagens com anexos de arquivos específicos. Eu preciso para interagir com os anexos.
Atualmente, estou salvando o arquivo para um novo local e acessá-lo de lá. Este processo de cópia é me atrasando. Eu tinha idealmente como para acessar o arquivo de onde ele está sendo armazenado na memória, mas o campo Outlook.Attachment.PathName
está retornando null.
As mensagens estão sendo armazenados em um servidor Exchange.
É possível acessá-las diretamente ou que eu preciso para continuar salvando os arquivos?
Solução
Outlook.Attachment.PathName
implica um local disco. O anexo é um arquivo; se você quiser interagir com ele, você tem que tratá-lo como um arquivo, e que os meios de salvá-lo para o disco local.
O objeto Outlook.Attachment
não contém realmente o arquivo anexado; ele contém um link para o arquivo anexado, com alguns metadados associados.
Outras dicas
Eu não sei se é possível de forma alguma através do modelo de objeto Outlook, mas MAPI certamente permite isso.
Você precisa abrir a mensagem MAPIObject
, um IMessage
. A partir daí usar IMessage::OpenAttach()
, que retorna um IAttach
O tamanho do anexo é armazenado em PR_ATTACH_SIZE
, os dados reais em PR_ATTACH_DATA_BIN
.
Como sempre, Redemption provavelmente tem uma maneira mais fácil de fazer isso.
Editar:
Acesso via MAPI é o Outlook faz internamente de qualquer maneira - deve ser razoavelmente rápido, pelo menos quando se usa o modo de transferência em cache