使用XSLT制作HTML邮件模板并发送
之前有寫過能發送郵件的小工具,基本做法就是先在代碼中寫死一封HTML郵件的格式,然后用適當的方法取得外部的幾個值填到預設的參數里,最后把合體后的string類型郵件發出去。簡單的郵件還好,當內容稍微多一點,比如輸出數據庫的一個表,又或者郵件格式經常要變動的,就感覺很麻煩很受拘束。
后來看到了別人用XSLT做的一個郵件模板,很受啟發。自己也嘗試了一下,就有了這篇文章。
下面這個方法是從數據庫里搜索符合條件的數據(列出由指定用戶管理并且已經超過有效期限的文檔,以XML形式導出),然后使用指定的xslt文件格式化取得的XML格式數據。
?
??????? /// <summary>
??????? /// 生成郵件內容
??????? /// </summary>
??????? /// <param name="date">預定刪除日期</param>
??????? /// <param name="account">管理者ID</param>
??????? private string GetSendMailBoby(DateTime date, string account)
??????? {
??????????? using (conn = new SqlConnection(
?????????????????????? ConfigurationManager.ConnectionStrings["mainDB"].ConnectionString))
??????????? {
??????????????? conn.Open();
??????????????? string bodyString = string.Empty;
??????????????? string commString = string.Empty;
??????????????? commString += "SELECT item_name,item_url,parent_url FROM DocAddress ";
??????????????? commString += "WHERE manger_id=@account AND due_date<=@executedate AND ";
??????????????? commString += "send_flg = 0 FOR XML AUTO, ELEMENTS,ROOT('SendmailToUser')";
?
??????????????? SqlCommand command = new SqlCommand(commString, conn);
??????????????? command.Parameters.AddWithValue("@account", account);
??????????????? command.Parameters.AddWithValue("@executedate", date);
?
??????????????? using (XmlReader reader = command.ExecuteXmlReader())
??????????????? {
??????????????????? XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();
?
??????????????????? transform.Load(
??????????????????????? Application.StartupPath + @""" + ConfigurationManager.AppSettings["Mail.Template"]
??????????????????????? );
??????????????????? XsltArgumentList argList = new XsltArgumentList();
?
??????????????????? argList.AddParam("deleteday", "", date.AddDays(14).ToLongDateString());
?
??????????????????? using (StringWriter writer = new StringWriter())
??????????????????? {
??????????????????????? transform.Transform(reader, argList, writer);
?
??????????????????????? bodyString = writer.ToString();
??????????????????? }
??????????????? }
??????????????? conn.Close();
??????????????? return bodyString;
??????????? }
??????? }
?
相應的XSLT文件。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
???????????? xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
?<xsl:output method="html" />
?<xsl:param name="deleteday"/>?
?
?<xsl:template match="DocAddress">?
??? <tr>
????? <td width="250">
??????? <xsl:element name="A">
????????? <xsl:attribute name="href">
??????????? <xsl:value-of select="item_url"/>
????????? </xsl:attribute>
????????? <xsl:value-of select="item_name"/>
??????? </xsl:element>
????? </td>
????? <td>
??????? <xsl:element name="A">
????????? <xsl:attribute name="href">
??????????? <xsl:value-of select="parent_url"/>
????????? </xsl:attribute>
????????? 打開保存地址
??????? </xsl:element>
????? </td>
??? </tr>
?</xsl:template>
?
?<xsl:template match="/">
??? <html>
????? <head>
??????? <title>過期文章刪除通知</title>
????? </head>
????? <body>
??????? 您所管理的下列郵件將在<xsl:value-of select="$deleteday"/>予以刪除。
??????? <br/><br/>
??????? <table bordercolor="#000000" border="1" cellspacing="0" >
????????? <tr>
??????????? <td width="250" style="font-weight: bold; background-color: silver">
????????????? <center>文件名</center>
??????????? </td>
??????????? <td style="font-weight: bold; background-color: silver">
????????????? <center>存儲地址</center>
??????????? </td>
????????? </tr>
????????? <xsl:apply-templates select="/SendmailToUser/DocAddress" />
??????? </table>
??????? <br/>
????? </body>
??? </html>
?</xsl:template>
</xsl:stylesheet>
?
具體的xslt語法,參考下列網址
http://www.w3school.com.cn/xsl/index.asp
?
附上完整代碼。(相關數據庫表的建立參考壓縮包內[~TableCreate.txt]文件。此外,因為涉及到調用MOSS2007的服務器端設定,必須引用Microsoft.SharePoint.dll,請自行添加DLL或刪除相關代碼。)
/Files/Kenr/MailSender.rar
轉載于:https://www.cnblogs.com/Kenr/archive/2009/06/24/1510141.html
總結
以上是生活随笔為你收集整理的使用XSLT制作HTML邮件模板并发送的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑使用怎么安装win7系统还原 Win
- 下一篇: u盘启动盘制作了怎么恢复 U盘启动盘制作