Веб-службы Exchange — преобразование вложения электронной почты из строки Base64 в байт дает ошибку

Я пытаюсь прочитать вложение элемента электронной почты с помощью EWS и сохранить его на диск в виде текстового файла, чтобы его можно было использовать позже.

Я получаю сообщение об ошибке:

"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. "

вот мой код:

Directory.CreateDirectory(emailAttachmentsPath);

// Put attachment contents into a stream. C:\Dev\EWSHelloWorld
emailAttachmentsPath = emailAttachmentsPath + "\\" + sEmailSubject+".txt";

//save to disk 
using (Stream FileToDisk = new FileStream(emailAttachmentsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    byte[] ContentBytes = System.Convert.FromBase64String(itemAttachment.ToString());

    FileToDisk.Write(ContentBytes, 0,ContentBytes.Length);
    FileToDisk.Flush();
    FileToDisk.Close();
} 

пожалуйста, как лучше всего это сделать?

Я в основном хочу, чтобы текст электронного письма был в текстовом файле, и любые вложения в этом электронном письме также были бы сохранены на диск (я могу сделать эту часть, я думаю, с помощью FileStream.


person Our Man in Bananas    schedule 14.04.2014    source источник
comment
эта помощь?   -  person groverboy    schedule 14.04.2014


Ответы (1)


Филип,

Вы не сможете использовать метод Convert() для ItemAttachment, так как он не закодирован в Base64. Вложение элемента имеет много свойств об элементе, и, если я правильно понимаю ваш запрос, вы ищете только тело электронного письма.

Первое, что вам нужно рассмотреть, это добавить проверку, чтобы увидеть, является ли ItemAttachment сообщением электронной почты. Если это так, есть пара строк, чтобы добраться до текста тела письма:

itemAttachment.Load(new PropertySet(BasePropertySet.FirstClassProperties));
string BodyText = itemAttachment.Item.Body.Text;

Первая строка загрузит элемент и его свойства первого класса. Во второй строке будет текстовая версия тела письма.

Надеюсь, это поможет. Если это решит ваш вопрос, отметьте сообщение как отвеченное.

Спасибо,

--- Боб ---

person Bob Bunn    schedule 14.04.2014
comment
спасибо, Боб, мне может понадобиться сохранить вложение элемента на диск, чтобы его можно было загрузить в нашу систему CRM, но я не могу заставить .NET распознавать свойство ItemType (используя ItemType TheItemAttachment = ((ItemAttachmentType) email.Attachments[0]).Item; из Блог MSDN: HOWTO: EWS: используйте GetAttachment для загрузки вложений из Mail — нужно ли мне делать что-то еще? - person Our Man in Bananas; 15.04.2014
comment
Пара замечаний по этому примеру. 1) Он не использует управляемый API EWS, он использует созданный прокси-сервер для веб-службы. Это не рекомендуемый подход. 2) В этом примере электронная почта не сохраняется в виде текстового файла, а сохраняется в виде файла .EML из MimeContent сообщения. Это отличается от того, что вы описали как желаемый результат. Вы можете проверить, является ли itemAttachment сообщением электронной почты, используя что-то вроде: if(itemAttachment.Item.ItemClass == "IPM.Note") - person Bob Bunn; 15.04.2014