utf-8 email

  • Hallo ihr Lieben,


    ich versuche gerade ein mail mit utf-8 Zeichensatz zu erstellen/versenden. Leider gelingt mir dies nur mit mageren Ergebnis, soll heißen, der Text wird falsch dargestellt. Wie gehe ich vor:
    eine Datei mit czechischen Text in utf-8 liegt vor, ohne BOM.
    Eine DvISE Vorlage wurde erstellt.
    Programmtechnisch lese ich die Vorlage und die Textdatei ein. Plaziere in der Vorlage den utf-8 text, übergebe das an die API


    FormattedText* pFormattedText = NULL;
    pMailItem->get_BodyText(&pFormattedText);
    pFormattedText->put_Charset(strCharset.AllocSysString());
    pFormattedText->put_PlainText(strPlainText.AllocSysString());
    pFormattedText->put_HTMLText(strHtmlText.AllocSysString());

    und versende es


    pMailItem->Send(vType, vEmpty);



    das Problem, wenn ein Zeichen 3 Bytes lang ist, dann wird es auch als 3Bytes angezeigt, aber an für sich besteht es nur aus einem lesbaren Buchstaben.


    Lese ich die Datei in WordPad ein, so ist alles ok


    Füge ich den utf-8 Text (copy/paste aus wordpad) händisch über das Info-Center in die Vorlage ein, versende es, dann kommt es auch richtig bei dem Empfänger an.


    Worin könnte mein Fehler liegen ?


    Vielen Dank


    Gruß
    -Uwe

  • für den Fall das jemand auch darüber stolpert antworte ich mir selber.


    Da der Text in sich schon utf-8 ist, so muss man statt


    pFormattedText->put_HTMLText(strHtmlText.AllocSysString());


    nun so vorgehen (schematisch dargestellt)


    int len = MultiByteToWideChar(CP_UTF8, 0, strHtmlText.GetString(), strHtmlText.GetLength(), 0, 0);
    BSTR bstr = SysAllocStringLen(0, len);
    MultiByteToWideChar(CP_UTF8, 0, strHtmlText.GetString(), strHtmlText.GetLength(), bstr, len);
    pFormattedText->put_HTMLText(bstr);


    Gruß
    -Uwe



Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!