2015-04-28 2 views
3

Ярмарка предупреждения: Я немного новичок в C# и в Outlook, так что несите меня.Преобразование почтового вложения Outlook в массив байтов с C#

Я экспериментировал с электронной почтой в Outlook для быстрого и грязного добавления, которое я создаю, но для добавления требуется, чтобы я отправлял прикрепленные файлы в другую систему.

Короткий рассказ; для этого мне нужно преобразовать почтовое вложение элемента Outlook в массив byte.

То, что я до сих пор (и полный код, очевидно миль больше, чем это, но я уверен, что все мы имеем дела поважнее, чем сидеть и читать страницу вверх и вниз страницы кода):

Outlook.Selection sel = control.Context as Outlook.Selection; 
Outlook.MailItem mail = sel[1]; 
Outlook.Attachment a = mail.Attachments[0]; 

Проблема в том, что я понятия не имею, как конвертировать a в массив byte.

PS: Я знаю, что есть около миллиарда ответов относительно того, как преобразовать byte массив в почте, но никто не объясняет, как получить это работает наоборот.

EDIT 1: Я бы предпочел не сохранять файл.

ответ

4

Второй метод, предложенный Дмитрием (открытое вложение как бинарный поток), также реализуется в управляемом коде. Он использует интерфейс PropertyAccessor, который доступен для объектов Attachment в C#. Вот некоторые примеры кода я успешно использовал в своем собственном проекте:

const string PR_ATTACH_DATA_BIN = "http://schemas.microsoft.com/mapi/proptag/0x37010102"; 

Outlook.Attachment attachment = mail.Attachments[0]; 

// Retrieve the attachment as a byte array 
var attachmentData = 
    attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN); 

Мой пример кода на основе Как изменить прикрепление к электронной почте Outlook сообщения тему, представленную Кен Гетц, MCW Technologies, LLC в составе MSDN documentation.

+0

Имейте в виду, что в старых версиях Outlook может возникнуть проблема с получением больших двоичных свойств, таких как PR_ATTACH_DATA_BIN, особенно в режиме онлайн-обмена. –

+0

hmm получить ошибку на этой последней строке. Я проверил, что существует не менее 1 привязки: индекс массива за пределами границ. –

+0

@DmitryStreblechenko какие старые версии Outlook? Это нормально для Outlook 2010? –

1

Вы можете

  1. Сохранить вложение (Attachment.SaveAsFile) в файл, а затем открыть файл в виде потока байтов.
  2. Если вы использовали C++ или Delphi, вы можете использовать IAttach::OpenProperty (PR_ATTACH_DATA_BIN, IID_IStream, ..), чтобы открыть вложение как объект COM-объекта IStream.
  3. Если опция Redemption является опцией, она предоставляет свойство AsArray на объектах Attachment и RDOAttachment.
+0

Спасибо за ответ, но не совсем то, что я искал. Я бы предпочел не сохранять его в файл, я не использую C++ или Delphi, а Redemption, к сожалению, не вариант. – ViRALiC

+0

Если вы ограничены объектной моделью Outlook, вы ничего не можете сделать ... –

+0

Хорошо, если никто не сможет придумать лучшее решение, я дам вам лучший ответ. – ViRALiC

Смежные вопросы