Frank (no reg): Multipart Message / link rel styleshee & cid

Hallo zusammen,

ich möchte gern Emails (intern) verschicken, schön mit Corporate Identity (Logo und Styles). Message Body ist HTML und Encoding ist UTF-8. Funktionieren tut das ganze auch schon soweit via .Net 2.0 / C# / System.Net.MailMessage.

Ich generiere mittels XSLT ein HTML Dokument mit folgendem Inhalt (gekürzt):

  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head>  
  <title>Report</title>  
  <link rel="stylesheet" href="cid:styles" type="text/css" media="screen" />  
</head>  
<body>  
  <img src="cid:companylogo" style="width:994px;height:96px;border:none;" alt="company logo" />  
    <h2>Hello !!</h2>  
</body>  
</html>  

Das ganze verschicke ich so

  
using (MailMessage mm = new MailMessage())  
{  
    mm.To.Add(this.recipientList);  
    mm.IsBodyHtml = true;  
    mm.Subject = "Hello ... testing multipart messages";  
    mm.SubjectEncoding = Encoding.UTF8;  
    // define alternate view  
    AlternateView avHtml = new AlternateView(context.Server.MapPath("./Resources/TestEmail.html"), new ContentType("text/html; charset=utf-8"));  
    // create the styles resource  
    LinkedResource lsStyles = new LinkedResource(context.Server.MapPath("./gfx/styles.css"), new ContentType("text/css; charset=utf-8"));  
    lsStyles.ContentId = "styles";  
    avHtml.LinkedResources.Add(lsStyles);  
    // create the logo resource  
    LinkedResource lsLogo = new LinkedResource(context.Server.MapPath("./gfx/cp_header.jpg"), MediaTypeNames.Image.Jpeg);  
    lsLogo.ContentId = "companylogo";  
    lsLogo.TransferEncoding = TransferEncoding.Base64;  
    avHtml.LinkedResources.Add(lsLogo);  
    // text view  
    AlternateView avText = AlternateView.CreateAlternateViewFromString("Hello ... in plain text", Encoding.UTF8, MediaTypeNames.Text.Plain);  
    // add the views to the mail message object  
    mm.AlternateViews.Add(avHtml);  
    mm.AlternateViews.Add(avText);  
    // send off  
    smtp.Send(mm);  
    // dispose  
}  

  • Mail kommt an
  • Mail wird in Outlook 2003 gelesen
  • Mail wird im HTML Modus angezeigt
  • Company Logo und Styles kommen mit (wenn ich die cid anders bennene, bekomme ich die beiden Sachen als att124.jpg usw)
  • Company Logo wird angezeigt

Problem: -> Styles aus dem CSS-Stylesheet File werden nicht angewendet

Stellt sich die Frage:

  • liegt es am Outlook 2003
  • liegt es am Versenden mit LinkedResource (Fehler von meiner Seite?)
  • liegt es an .net (System.Net.MailMessage)
  • funktioniert dies für Stylesheets bzw. link rel="Stylesheet" gar nicht

Hat da evt jemand von euch eine Idee, wie man das Problem beheben könnte?

Vielen Dank vorab.
Frank

  1. Moin!

    ich möchte gern Emails (intern) verschicken, schön mit Corporate Identity (Logo und Styles).

    Ein frommer Wunsch, aber die Realität der existierenden Mailclients wird es dir vermiesen!

    Problem: -> Styles aus dem CSS-Stylesheet File werden nicht angewendet

    Das liegt daran, dass CSS grundsätzlich in Mailclients nicht sehr häufig angezeigt wird.

    Minimalschritt: Externe Referenzierung mit <link> unterlassen, bringt ja sowieso keinen Vorteil, weil das CSS sowieso mitgeschickt werden muss - also kann es auch gleich in einer <style>-Insel stehen.

    • funktioniert dies für Stylesheets bzw. link rel="Stylesheet" gar nicht

    Wie erwähnt: Mailclients und CSS passt derzeit ganz schlecht zusammen. HTML-Mails sind bekanntlich eine Krankheit - für die einen wegen des darin enthaltenen HTML (weil ultrahübsche Formatierung nicht in die Mail gehört), für die anderen wegen des darin enthaltenen HTML (weil man Oldschool-HTML-Formatierung mit HTML-Attributen und ohne CSS machen muss).

    Anmerkung weitab vom Thema: Mich erreichen dummerweise immer wieder mal Spam-Mails (soll vorkommen). Spannend finde ich dann, wenn mein Mailclient mir (weil so konfiguriert) nur den text/plain-Alternativteil anzeigt, der sinngemäß lautet: "Ihr Mailclient kann keine HTML-Mails anzeigen, klicken sie hier (Link auf Webseite)".

    Da denke ich mir dann doch: Wie blöd seid ihr? Hättet ihr den Plaintext-Teil weggelassen, hätte mein Mailclient aus dem HTML einen Plaintext generiert, der inhaltlich wenigstens was rübergebracht hätte. Genausogut hätte man den Textinhalt der HTML-Mail auch im Plaintext wiederholen können, um die Werbebotschaft rüberzubringen. Aber ich werde bestimmt einen Teufel tun und irgendeinen Link anklicken.

    Fazit: HTML-Mails sind auf vielerlei Weise böse. Man sollte sie meiden.

    - Sven Rautenberg

    1. Hallo,

      danke für den Input ... <style>-Insel ist natürlich die Alternative, funktioniert sogar "erstaunlichst gut" ;) - muss ich mein XSLT noch noch anweisen, den Style-Block zu importieren und nicht zu referenzieren.

      Gruss, Frank