C# MimeKit WriteTo: Anhang Encoding verändern

eqor

Cadet 4th Year
Registriert
Jan. 2020
Beiträge
88
Hallo!
Ich habe ein Programm geschrieben, das in meinen Posteingang schaut und den Inhalt der Datei im Anhang in eine .txt Datei schreibt.
Wie man sieht, ist Content-Transfer-Encoding: base64. Ich möchte aber UTF-8.
So sieht mein Programm aus:
C#:
using System;
using System.Linq;
using System.Net.Mail;
using MailKit;
using MimeKit;
using MailKit.Net;
using MailKit.Net.Imap;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace Library
{
        class Program
        {
            static void Main(string[] args)
            {
                var imapUrl = "uiiiitoll";
                var username = "wüsstetihrwohlgernwas:)@sche.de";
                var password = string.Join("", (new[] { 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88 }).Select(i => (char)i));
        
                using var imapClient = new ImapClient();
                imapClient.Connect(imapUrl);
                imapClient.Authenticate(username, password);
                var hotklappt = imapClient.IsAuthenticated;
                Console.WriteLine($"Hello World! {hotklappt}");


                var inbox = imapClient.Inbox;

                Console.WriteLine(inbox.FullName);

                hotklappt = inbox.Exists;
                Console.WriteLine($"Exists {hotklappt}");
                inbox.Open(FolderAccess.ReadOnly);
                foreach (var msg in inbox)
                {
                    var att = msg.Attachments;
                    foreach (var item in att)
                    {
                        //item.ContentType = ContentEncoding.Binary;
                        item.WriteTo(fileName: "C:/Kruscht/TextDateien/test.txt");

                    }

                    Console.WriteLine($"{msg.MessageId} {msg.Subject}");
                    if (UniqueId.TryParse(msg.MessageId, out var uid))
                    {
                        Console.WriteLine(uid);
                    }
                    //inbox.MoveTo()
                }
            }
    }
}

An das Encoding komme ich nicht ran. Es sitzt hier: Unter "MimePartClass" Meine Variable "item" ist ein "MimeEntity" und besitzt anscheinend keine Definition für "ContentTransferEncoding". Wenn ich aber beim Debuggen in "item" reinschaue steht da das Property:
ContentTransferEncoding: base64

Weiß einer wie man das Encoding hier z.B. auf UTF-8 stellt? Hatte jemand schon einmal mit MimeKit zu tun?
Danke im Vorraus :)
 

Anhänge

  • 1582190909366.png
    1582190909366.png
    49,7 KB · Aufrufe: 454
preqi schrieb:
Weiß einer wie man das Encoding hier z.B. auf UTF-8 stellt?
Du kannst nicht einfach "das Encoding auf UTF-8 stellen", sondern Du musst die base64-codierte Datei selber base64-decodieren!

Guckst Du: https://docs.microsoft.com/de-de/dotnet/api/system.convert.frombase64string?view=netframework-4.8

Mein kleines Progrämmchen
Code:
using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        byte[] bytes = Convert.FromBase64String("UEsDBBQABgAIAAAAIQBelNVZAwIAAM8LAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAA");

        Console.WriteLine("   {0}\n", BitConverter.ToString(bytes));

        File.WriteAllBytes("out.bin", bytes);
    }
}
nutzt als Eingabe die ersten 96 Zeichen aus Deinem Anhang von oben (persönlich abgetippt ;) ) und schreibt die Datei "out.bin" (Länge 72 Bytes) mit dem decodierten Inhalt.

Dieser sieht so aus:
Code:
000000: 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 5E 94  PK..........!.^.
000010: D5 59 03 02 00 00 CF 0B 00 00 13 00 08 02 5B 43  .Y............[C
000020: 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D  ontent_Types].xm
000030: 6C 20 A2 04 02 28 A0 00 02 00 00 00 00 00 00 00  l ...(..........
000040: 00 00 00 00 00 00 00 00                          ........
Ist also eine ZIP-Datei (erkennbar am "PK"), in der u.a. eine Datei mit dem Namen "[Content_Types].xml" steckt...


HTH

BigNum
 
  • Gefällt mir
Reaktionen: eqor
Zurück
Oben