我有一个xml文件,用xslt样式来生成html电子邮件模板.我怎么能得到的xml作为html电子邮件正文在c#

本文关键字:电子邮件 html xml 怎么能 作为 正文 有一个 xslt 样式 文件 | 更新日期: 2023-09-27 18:05:37

我有一个样式为xslt的xml文件,用于生成html电子邮件模板。我动态地从用户处获取值,并用收到的值替换xml元素文本。我怎么能得到的xml文件和发送作为html电子邮件正文在c#?

My Xml Looks Like This

  <?xml version="1.0" encoding="utf-8" ?>
  <?xml-stylesheet type="text/xsl" href="EmailTemplateStyleForHTML.xslt"?>
 <EmailTemplate>
   <subject>Information from xyz</subject>
   <displayName>abcd</displayName>
   <Message1>
    Thanks you for registering to xyz.
  </Message1>
  <Copyright>Copyright xyz</Copyright>
 </EmailTemplate>

我使用LINQ将值设置为xml。注意:我知道如何从xml中获取和设置值,但我想要的是将整个xml文件抓取到电子邮件正文中。

如果你认为有更好的方法,我很乐意听到。我将非常感谢你的帮助。

回复后编辑:xsl转换部分:

            TextReader tr1 = new StringReader(@"EMailTemplateHtml.xml");
            var tr11 = new XmlTextReader(tr1);
            var xPathDocument = new XPathDocument(tr11);
            //read XSLT
            TextReader tr2 = new StringReader(@"EmailTemplateStyleForHTML.xslt");
            var tr22 = new XmlTextReader(tr2);
            var xslt = new XslTransform();
            xslt.Load(tr22);

            var sb = new StringBuilder();
            TextWriter tw = new StringWriter(sb);
            xslt.Transform(xPathDocument, null, tw);
            emailBody = sb.ToString();

我正在做你说的转换(@Roy Ashbrook)我在这里错过了什么吗?

我有一个xml文件,用xslt样式来生成html电子邮件模板.我怎么能得到的xml作为html电子邮件正文在c#

我相信您需要在内存中实际执行XSL转换,而不是在XML本身中引用它。您可以将XSL存储在远程位置并以这种方式引用它,但我不会

:

  1. 将您的值注入xml字符串
  2. 使用xsl
  3. 转换xml
  4. 使你的html消息体
下面是一些代码。主要借用/启发于:如何转换XML作为一个字符串w/o使用文件在。net ?和使用c#发送电子邮件。
void Main()
{
    SendHtmlBody(GetHtmlBody());
}
void SendHtmlBody(string HtmlBody){
    using(SmtpClient c = new SmtpClient())
    {
        //set smtp options here
        using(MailMessage msg = new MailMessage("from@replace.me","to@replace.me"))
        {
            msg.Subject = "Testing Bulk mail application";
            msg.Body = HtmlBody;
            msg.IsBodyHtml = true;
            //c.Send(msg);
        }
    }
}
string GetHtmlBody(){
    string xmlInput = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
    <EmailTemplate>
    <subject>Information from xyz</subject>
    <displayName>abcd</displayName>
    <Message1>
        Thanks you for registering to xyz.
    </Message1>
    <Copyright>Copyright xyz</Copyright>
    </EmailTemplate>";
        string xslInput = @"<?xml version=""1.0"" encoding=""ISO-8859-1""?>
    <xsl:stylesheet version=""1.0""
    xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
    <xsl:template match=""/"">
    <html>
    <body>
        <h5><xsl:value-of select=""EmailTemplate/subject""/></h5>
        <h5><xsl:value-of select=""EmailTemplate/displayName""/></h5>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>";
    using (StringReader srt = new StringReader(xslInput)) // xslInput is a string that contains xsl
    using (StringReader sri = new StringReader(xmlInput)) // xmlInput is a string that contains xml
    {
        using (XmlReader xrt = XmlReader.Create(srt))
        using (XmlReader xri = XmlReader.Create(sri))
        {
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(xrt);
            using (StringWriter sw = new StringWriter())
            using (XmlWriter xwo = XmlWriter.Create(sw, xslt.OutputSettings)) // use OutputSettings of xsl, so it can be output as HTML
            {
                xslt.Transform(xri, xwo);
                return sw.ToString();
            }
        }
    }
}