Multipart Message / link rel styleshee & cid
Frank (no reg)
- programmiertechnik
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
}
Problem: -> Styles aus dem CSS-Stylesheet File werden nicht angewendet
Stellt sich die Frage:
Hat da evt jemand von euch eine Idee, wie man das Problem beheben könnte?
Vielen Dank vorab.
Frank
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
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