一直以来,mail模板的维护都没有一个定式,不是存放于数据库,就是直接读html文件,要么更变态直接在source中拼接html代码,这些都有一定的弊端。
存放于数据库中:
一是徒增操作的烦琐性,二是若要修改mail模板,每次都得从数据库中捞出来编辑再存入数据库中,才能看到编辑后的效果,不方便。
读文件的方式:
这种方式配置起来不是很方便,项目灵活性不怎么好,要限定文件的路径等问题,尤其是web项目。
拼在source中:
这种方式就更加郁闷了,需要修改模板时,得先运行程式将该html获得,再做编辑,然后再拼在source中,会让程序员有砍人的冲动!
这次在做项目的过程中,需要维护mail模板,开始的时候直接读文件的方式,因为pm没有提供数据库,也不想增加维护的苦难度。后来思考来思考去,觉得不怎么妥当,决定尝试一下资源文件的做法(还好的.net项目)
1、首先创建一个mailtemplate.resx文件到项目中,并设定编译选项为“嵌入的资源”。
2、在mailtemplate.resx文件中维护html字符串(以键值对的形式)
3、在程序中就可以通过resourcemanager读取该resx中的资源。
public static string getresourcebykey(string resourcename,string key)
{
// create a resource manager to retrieve resources.
resourcemanager rm = new resourcemanager(resourcename, assembly.getexecutingassembly());
rm.ignorecase = true;
// retrieve the value of the string resource named
string strvalue = rm.getstring(key);
rm = null;
return strvalue;
}
4、这里原理是将mail template作为内嵌的资源编译到项目中,那么该资源即存在于该装配件中,在程序运行时,可以利用反射技术通过当前assembly的信息获取其中的资源。
需要注意的是:resourcemanager构造函数中resourcename为资源文件的namespace,如mailtemplate.resx的namespace为testproject.mailtemplate,则resourcename应该为testproject.mailtemplate。