0

所以我正在发送一封电子邮件,其中包含他们所在页面(收据页面)的 div 元素的内容。在 Receipt 页面中,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;
4

3 回答 3

3

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

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

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

于 2012-04-25T02:15:41.910 回答
1

要发送 html 邮件,我要做的是:

  1. 创建具有内联或内页样式的 html 模板。我不喜欢外部参考,但你仍然需要,你必须将你的 css 文件存储到一些在线位置。

  2. 同样,如果您的模板是丰富的图像,则将 html 的所有内容(如 css、图像)上传到远程服务器上。

  3. 使用 textreader 对象读取所有行

    using(TextReader reader =new StreamReader(path_of_html_file))
      {   
        var stringvalue = reader.ReadAllLines()
        stringvalue = stringvalue.Replace("[NAME]", db.Value.SomeValue);
      }
    

    // 我不确定方法,但有相同的方法。这只是为了帮助。使用数据库驱动的值搜索和替换文本。就像我通常在我的原始 html 上使用 [NAME]、[EMAIL] 类型字符串并使用 db 值替换它们。或者您也可以使用正则表达式在大型 html 文档中进行搜索和替换。

  4. 使用设置为 true 的邮件正文的 html 属性发送邮件。

于 2012-04-25T21:31:56.363 回答
-1

如下发送带有样式表的电子邮件
// 在发票 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" );
    string a,b;
    a="<html><body>";
    b="</body></html>";
    message.Body = a + s + b;
    SmtpClient emailClient = new SmtpClient( "localhost", 8025 );
    System.Net.NetworkCredential SMTPUserInfo = new      System.Net.NetworkCredential( "blargh", "blargh" );
    emailClient.UseDefaultCredentials = false;
    emailClient.Credentials = SMTPUserInfo;
于 2015-10-13T11:47:09.973 回答