ImapX i kodowanie

D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Korzystając z biblioteki imapx + informacje załączone na stronie udało mi się logować na skrzynkę i pobierać wiadomości, jednak pojawił się problem z kodowaniem, zamiast polskich znaków miałem znaki typu "=?" i inne. Skorzystałem więc z ich pomocy na stronie głównej projektu i wkleiłem to do programu (co wg ich powinno działać)

Kopiuj
                     foreach (ImapX.Message m in client.Folders["INBOX"].Messages)
                    {
                        m.Process();

                        //preparing subject to be sent
                        string codedSubject = "=?UTF-8?B?" + Convert.ToBase64String(Encoding.UTF8.GetBytes(m.Subject.ToString())) + "?=";
                        //decoding subject from received message
                        string decodedSubject = Encoding.UTF8.GetString(Convert.FromBase64String(codedSubject.Split('?')[4]));
                        //decoding body from Base64/UTF8 :
                        string decodedBody = Encoding.UTF8.GetString(Convert.FromBase64String(m.HtmlBody.TextData));

                        listaMaili.Add(new odczyt(m.From.ElementAt(0).Address, m.To.ElementAt(0).Address, m.Subject.ElementAt(0).ToString(), m.TextBody.TextData, m.Date.ToString()));
                    }

Jednak przy próbie dekodowania w tej lini :

Kopiuj
string decodedSubject = Encoding.UTF8.GetString(Convert.FromBase64String(codedSubject.Split('?')[4]));

Program wysypuje się z błędem: "Invalid length for a Base-64 char array."

Pozdrawiam.

edytowany 2x, ostatnio: dejmien666
D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Przerobiłem powyższy kod wg google i trochę po swojemu, teraz nie wywala błędów, jednak dalej nie zmienia kodowania.

Kopiuj
    string temat = m.Subject.ToString();
                        string tematKon = string.Empty;

                        Encoding enc = Encoding.GetEncoding("iso-8859-2");
                        UTF8Encoding utf8 = new UTF8Encoding();

                        byte[] src = enc.GetBytes(temat);
                        byte[] dest = Encoding.Convert(enc, utf8, src);
                        tematKon = utf8.GetString(dest);

Co jest tym razem nie tak?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.