none
Problém s češtinou v mailu ve frameworku 3.5

    Dotaz

  •  

    Dobrý den

    Převedl jsem webovou aplikaci z 2.0 na 3.5 a mám problém s kódováním emailů.
    Posílám emaily v UTF8 (mail.BodyEncoding = Encoding.UTF8)

    Pod 2.0 bylo v hlavičce mailu:
    Content-Type: text/html; charset="UTF-8"
    a všude se to zobrazovalo správně.

    Nyní pod 3.5 je tam
    Content-Type: text/html; charset="Unicode (UTF-8)"
    a ve většině klientů se to zobrazuje špatně (neidentifikují kódování a
    nastaví nějaké default, většinou Win1250 nebo ISO)

    Existuje způsob, jak donutit MailMessage ke správnému zápisu hlavičky? Teda
    nevim který je správný, ale ten starý fungoval :-)

    Díky
    Novotný
    4. ledna 2009 2:19

Odpovědi

  • Dobrý den

    k odesílání emailu používám AlternateView. Vkládám do něj prostý text, html i vCalendar. Vše se zobrazuje správně česky. Přiložený úryvek kódu generuje do zprávy text a html.

    SmtpClient mailClient = new SmtpClient();
    MailMessage msg = new MailMessage();
    msg.To.Add(reservation.Email);
    msg.Subject = summary;
     
    //Text
    MemoryStream textStream = new MemoryStream();
    StreamWriter textWriter = new StreamWriter(textStream, Encoding.UTF8);
    Regex reg = new Regex("<[^>]*>", RegexOptions.Singleline);
    textWriter.WriteLine("Rezervace");
    textWriter.WriteLine("-----------------------"); 
    textWriter.WriteLine("Datum: " + reservation.Termin.ToLongDateString());
    textWriter.WriteLine("Čas: " + reservation.Termin.ToShortTimeString());
    textWriter.WriteLine(Resources.Resources.Location + ": " + reservation.Service.Location);
    textWriter.WriteLine("Číslo lístku: " + reservation.Service.QMPrefix + reservation.QMSequence.ToString());
    textWriter.WriteLine("Rezervaci zrušíte kliknutím na tento odkaz: " + linkToCancelReservation);
    textWriter.WriteLine(reg.Replace(reservation.Service.TextAccepted, " "));
    textWriter.Flush();
    textStream.Position = 0;
    ContentType textType = new ContentType("text/plain");
    textType.CharSet = "utf-8";
    AlternateView textView = new AlternateView(textStream, textType);
    msg.AlternateViews.Add(textView);
     
    
    //HTML 
    MemoryStream htmlStream = new MemoryStream();
    StreamWriter htmlWriter = new StreamWriter(htmlStream, Encoding.UTF8);
    htmlWriter.WriteLine("<h1>Rezervace</h1>"); 
    htmlWriter.Write("<b>");
    htmlWriter.WriteLine("Datum: " + reservation.Termin.ToLongDateString()); htmlWriter.WriteLine("<br/>");
    htmlWriter.WriteLine("Čas: " + reservation.Termin.ToShortTimeString()); htmlWriter.WriteLine("<br/>");
    htmlWriter.WriteLine(Resources.Resources.Location + ": " + reservation.Service.Location); htmlWriter.WriteLine("<br/>");
    htmlWriter.WriteLine("Číslo lístku: "+reservation.Service.QMPrefix + reservation.QMSequence.ToString()); htmlWriter.WriteLine("<br/>");
    htmlWriter.Write("</b>");
    htmlWriter.WriteLine("Rezervaci zrušíte kliknutím na <a href=\"{0}\">tento odkaz</a>.", linkToCancelReservation);
    htmlWriter.WriteLine(reservation.Service.TextAccepted); 
    htmlWriter.Flush();
    htmlStream.Position = 0;
    ContentType HTMLType = new ContentType("text/html");
    HTMLType.CharSet = "utf-8";
    AlternateView HTMLView = new AlternateView(htmlStream, HTMLType);
    msg.AlternateViews.Add(HTMLView);
     
    mailClient.Send(msg);


    Petr Barták
    .Net developer
    www.uzuzu.cz

    8. ledna 2009 10:40