c# - 将 div 元素发送到电子邮件时丢失样式 (C# asp.net)

标签 c# asp.net html css

所以我发送了一封电子邮件,其中包含他们所在页面(收据页面)的 div 元素的内容。在收据页面中,CSS 样式显示得很好。然而,当对象被发送到电子邮件时,样式似乎就消失了。它在一个单独的页面上,并在标题中称为表单(按照惯例)。我可以理解为什么会这样(只是发送要呈现的 html 而不是访问 css 样式)但我不确定如何解决它。

所以我的问题是,如何在不丢失 css 样式的情况下发送此 div 元素?

这是我的引用代码:

    StringWriter sw = new StringWriter( );
    HtmlTextWriter w = new HtmlTextWriter( sw );
    invoice.RenderControl( w ); //invoice is the div id of the element i am sending to email
    string s = sw.GetStringBuilder( ).ToString( );


    MailMessage message = new MailMessage( );
    message.IsBodyHtml = true;
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) );
    message.To.Add( new MailAddress( "email@email.ca" ) );
    message.Subject = "extra dimensional stack-overflow";
    message.From = new MailAddress( "email@email.ca" );
    message.Body = s;

    SmtpClient emailClient = new SmtpClient( "localhost", 8025 );
    System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential( "blargh", "blargh" );
    emailClient.UseDefaultCredentials = false;
    emailClient.Credentials = SMTPUserInfo;

最佳答案

电子邮件 HTML 阅读器需要混合使用内联样式,在某些客户端中,还需要基于 HTML 的样式标记(像 1999 年那样流行)。这很糟糕,但有一个很好的理由:通过引用任何外部资源,您将允许跟踪用户的行为并打开潜在的安全漏洞。这就是为什么大多数电子邮件程序在用户单击按钮之前不会加载外部图像的原因。电子邮件客户端不是 Web 浏览器,不应期望以相同的方式运行。

抱歉,电子邮件 HTML 只要求所有内容都包含在 <body> 中(没有 <head> 标签,没有脚本,也没有外部资源。)

顺便说一句,如果您希望您的电子邮件在所有客户端(包括 Outlook 和 Outlook Express)中一致显示,您还必须使用基于表格的布局。糟透了,但这是真的。

关于c# - 将 div 元素发送到电子邮件时丢失样式 (C# asp.net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308220/

相关文章:

c# - 如何使用PLSQL更新指定列的数据库表的行条目

c# - 为什么 OleDbDataAdapter.Fill() 非常慢?

ASP.NET 身份管理器错误 : error when trying to create a controller of type 'MetaController' (no parameterless public constructor)

html - 悬停时更改属性

c# - 如何在 Azure 应用服务中将 X509Certificate2 与 WCF 结合使用

c# - 如何通过 Assembly 访问泛型类型来解决它们?

asp.net - vs2013 azure web 部署失败并显示未知的 ProviderOption :DefiningProjectFullPath

html - CSS下拉菜单悬停效果

html - 在列表中显示选择标签选项,但在关闭选择框时隐藏文本

c# - 抛出新异常未被 Server.GetLastError() 捕获