使用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
后来看到了别人用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
相关文章推荐
- 使用XSLT制作HTML邮件模板并发送
- Java使用Velocity模板发送HTML格式邮件并解决中文乱码问题
- Java HtmlEmail 使用QQ邮箱发送邮件报错 530 Error: A secure connection is requiered(such as ssl)
- EBS中使用JAVA方式发送HTML格式邮件
- Spring中使用FreeMaker或Vilocity模板发送邮件 (转)
- 使用PHPMailer发送带附件并支持HTML内容的邮件
- Spring Boot 发送邮件和使用模板渲染邮件内容
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
- 使用PHPMailer发送带附件并支持HTML内容的邮件
- EBS中使用JAVA方式发送HTML格式邮件
- EBS中使用JAVA方式发送HTML格式邮件
- 使用JavaMail发送邮件之发送HTML邮件
- 使用Python发送HTML格式的邮件
- java使用Freemarker模板发送固定格式邮件
- 使用PHPMailer发送带附件并支持HTML内容的邮件
- jenkins 使用邮件模板插件发送邮件
- 封装PHP mail函数发送HTML邮件并使用中文发件人且自定义发件人邮箱地址
- 《pro Spring》学习笔记之使用Spring+James邮件服务器发送内嵌图片的HTML邮件
- spring mvc 发送html格式velocity邮件模板(包括定时发送与按钮触发发送)
- 使用Spring发送基于freemarker模板的邮件