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

将div元素发送到电子邮件时丢失样式(C#asp.net),c#,asp.net,html,css,C#,Asp.net,Html,Css,因此,我发送了一封电子邮件,其中包含了他们所在页面(收据页面)的div元素的内容。在收据页面中,css样式显示得很好。但是,当对象发送到电子邮件时,样式似乎就消失了。它位于单独的页面上,在标题中称为表单(按照通常的方式)。我可以理解为什么会发生这种情况(只是发送要呈现的html,而不是访问css样式),但不知道如何解决它 所以我的问题是,如何在不丢失css样式的情况下发送这个div元素? 以下是我的代码供参考: StringWriter sw = new StringWriter( );

因此,我发送了一封电子邮件,其中包含了他们所在页面(收据页面)的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只要求所有内容都包含在
中(没有
标记,没有脚本,也没有外部资源)


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

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

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


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

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

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

  • 类似地,如果您的模板是图像丰富的,则将html的所有内容(如css)和图像上传到远程服务器上

  • 使用textreader对象使用读取所有行

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

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


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

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

  • 类似地,如果您的模板是图像丰富的,则将html的所有内容(如css)和图像上传到远程服务器上

  • 使用textreader对象使用读取所有行

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

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


  • 发送带有样式表的电子邮件,如下所示
    //在发票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;
    
    StringWriter sw=新的StringWriter();
    HtmlTextWriter w=新的HtmlTextWriter(sw);
    发票。渲染控制(w)//invoice是我发送到电子邮件的元素的div id
    字符串s=sw.GetStringBuilder().ToString();
    MailMessage=newmailmessage();
    message.IsBodyHtml=true;
    message.To.Add(新邮件地址(会话[“eMail”].ToString());
    message.To.Add(新邮件地址(“email@email.ca" ) );
    message.Subject=“额外维度堆栈溢出”;
    message.From=新邮件地址(“email@email.ca" );
    a、b串;
    a=“”;
    b=“”;
    消息体=a+s+b;
    SmtpClient emailClient=新的SmtpClient(“本地主机”,8025);
    System.Net.NetworkCredential SMTPUserInfo=新的System.Net.NetworkCredential(“blargh”、“blargh”);
    emailClient.UseDefaultCredentials=false;
    emailClient.Credentials=SMTPUserInfo;
    
    发送带有以下样式表的电子邮件
    //在发票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;
    
    StringWriter sw=新的StringWriter();
    HtmlTextWriter w=新的HtmlTextWriter(sw);
    发票。渲染控制(w)//invoice是我发送到电子邮件的元素的div id
    字符串s=sw.GetStringBuilder().ToString();
    MailMessage=newmailmessage();
    message.IsBodyHtml=true;
    message.To.Add(新邮件地址(会话[“eMail”].ToString());
    message.To.Add(新邮件地址(“email@email.ca" ) );
    message.Subject=“额外维度堆栈溢出”;
    message.From=新邮件地址(“email@email.ca" );
    a、b串;
    a=“”;
    b=“”;
    消息体=a+s+b;
    SmtpClient emailClient=新的SmtpClient(“本地主机”,8025);
    System.Net.NetworkCredential SMTPUserInfo=新System.Net.Netor