Я разработчик OpenPop.NET.
Существует несколько проблем с кодом, который вы используете для создания экземпляра класса Message:
- Откуда исходит содержимое strMessage?
- Откуда вы знаете, что он закодирован только в ASCII?
Это две основные проблемы, которые, вероятно, будут иметь большое значение.
Вы НЕ должны использовать строку для хранения сообщения, вместо этого вы должны использовать необработанные байты!
Например (в C #):
byte[] byteMessage = someFileStream.ReadToEnd();
Message message = new Message(byteMessage);
Таким образом, вы не уничтожите сообщение, используя неправильную кодировку байтов. Как правило, электронное письмо содержит заголовок, в котором указывается, как декодировать байты в строку, что и будет делать класс сообщений OpenPop.
Теперь позвольте мне объяснить вложения. Вложения обычно представляют собой необработанные байты, например, изображение PNG - это несколько байтов, которые распознает устройство чтения PNG-изображений. Чтобы программа чтения изображений PNG могла понять картинку, необработанные байты вложений должны быть сохранены в файл. Вы можете получить необработанные байты, используя att.Body.
Существуют также вложения, в которых необработанные байты не имеют смысла - например, текстовое вложение, закодированное в BASE64, не очень полезно для программы чтения текста, и такое вложение необходимо преобразовать в текст перед сохранением. Вы можете получить текст, используя att.GetBodyAsText ().
Что вы делаете, это берете необработанные байты для вложения, а затем используете BitConverter для преобразования его в шестнадцатеричные числа - что я не могу понять. Вместо этого вы должны изменить:
BinaryStream.Write(BitConverter.ToString(att.Body))
до
BinaryStream.Write(att.Body)
на случай, если ваше вложение - изображение или более сложный файл.
Надеюсь, это поможет решить вашу проблему.