Разбор MIME-сообщения с использованием anmar.SharpMimeTools - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь разобрать MIME-сообщение, используя SharpMimeTools и несколько примеров сообщений Mime из Hunny Software . Мне удалось создать новое Сообщение из файла и сохранить декодированное тело в файл (это png-изображение), но созданный файл поврежден. В основном файл примера и тот, который я извлек, выглядят одинаково, но есть различия.

Файлы можно найти здесь:

  • Исходное сообщение в виде текстового файла: m0013.txt
  • Оригинальный PNG-рисунок: Blueball_original.png
  • Извлеченные, поврежденные PNG-изображения: Blueball.png

Выдержка из Hex-View файлов:
Оригинал:

89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 00 1b 00 00 00 1b 08 03 00 00 00 ba 0a 04
67 00 00 03 00 50 4c 54 45 ff ff ff 00 00 08 00
00 10 00 00 18 00 00 00 00 08 29 00 10 42 00 10
4a 00 08 31 00 10 52 08 21 73 08 29 7b 08 29 84
08 21 6b 00 18 5a 00 08 39 08 21 63 10 39 9c 18
42 a5 18 42 ad 18 42 b5 10 39 a5 10 31 94 00 18

Извлечено:

3f 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 00 1b 00 00 00 1b 08 03 00 00 00 3f 0a 04   
67 00 00 03 00 50 4c 54 45 3f 3f 3f 00 00 08 00   
00 10 00 00 18 00 00 00 00 08 29 00 10 42 00 10  
4a 00 08 31 00 10 52 08 21 73 08 29 7b 08 29 3f
08 21 6b 00 18 5a 00 08 39 08 21 63 10 39 3f 18
42 3f 18 42 3f 18 42 3f 10 39 3f 10 31 3f 00 18

... и, наконец, этот код я использую:

public void MIMETest()
{
    FileStream fileStream = new FileStream(@"D:\m0013.txt", FileMode.Open);
    SharpMimeMessage m = new SharpMimeMessage(fileStream);
    fileStream.Close();
    parseMessage(m);            
}

public void parseMessage(SharpMimeMessage message)
{
    if (message.IsMultipart)
    {
        foreach (SharpMimeMessage subMessage in message)
        {
            parseMessage(subMessage);
        }
    }
    else
    {
        System.IO.File.WriteAllText(@"D:\Extracts\" + message.Name,
            message.BodyDecoded, message.Header.Encoding);
    }
}

У вас есть предложения, как решить эту проблему?

1 Ответ

2 голосов
/ 01 февраля 2012

Вы записываете двоичные файлы, используя WriteAllText.Вы не можете рассчитывать на запись PNG с использованием средства записи текста.

WriteAllText следует использовать только для типов содержимого текста.Для других типов контента вы должны использовать WriteAllBytes.

Кроме того, в вашем коде вы пишете текст, используя оригинальную кодировку текста, с которой он был передан.Вы, вероятно, хотите просто использовать UTF-8 независимо от того, какой был оригинал.

...