1

HTMLメールテンプレートを生成するためにxsltでスタイル設定されたxmlファイルがあります。ユーザーから動的に値を取得し、xml 要素のテキストを受け取った値に置き換えます。そのxmlファイルを取得して、c#でHTMLメール本文として送信するにはどうすればよいですか?

私のXmlはこのように見えます

  <?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)ここに何か欠けていますか?

4

1 に答える 1

0

XML自体でXSL変換を参照するのではなく、実際にメモリ内でXSL変換を実行する必要があると思います。XSLをリモートの場所に保存し、そのように参照することは可能ですが、私はしません

それで:

  1. xml文字列に値を挿入します
  2. xslを使用してxmlを変換します
  3. それをあなたのhtmlメッセージ本文にしてください

ここにいくつかのコードがあります。主に借用/触発: .NETのファイルを使用せずにXMLを文字列として変換する方法は?および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();
            }
        }
    }
}
于 2013-03-23T03:42:47.150 に答える