您的位置:首页 > Web前端 > HTML

使用XSLT制作HTML邮件模板并发送

2009-06-24 13:33 483 查看
之前有写过能发送邮件的小工具,基本做法就是先在代码中写死一封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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: