通常的做法是在预先邮件模板里,约定好邮件内容的占位符,直到发送的时候,程序使用string.Replace去替换掉,比如:
尊敬的[name]:
你好,你在[DateTime]消費了[money]元
程序===============
string mailContent="读取出来的邮件模板内容";
mailContent=mailContent.Replace("[name]","dudu站長");
mailContent=mailContent.Replace("[DateTime]","2013-1-1");
mailContent=mailContent.Replace("[money]","99999");
然后将mailContent发送出去,这样方法应该是比较多人的做法,我个人来讲,也是使用这种方法,就是对程序效率有点怀疑了,还有维护也比较不方便,如果需要加个占位符,修改模板是一定的了,还需要修改程序代码。不知道有没有更加好的方法。
一般应该会把占位符放到数据库,然后程序只是遍历查询出来的占位符进行替换,所以是不需要更改程序代码的
模版也要放占位符啊
@dotnetgeek: 嗯,改模板是必须的。在我看来,模板并不是写死在程序中的,而是通过其他方式加载,也就不会导致每次更改模板的时候都得去更新程序
string.Replace()方法,不用是c#写的,效率应该还是可以的,不信的话,可以Reflector查看,会发现最终是外部方法的,所以你考虑性能的话,就不需要了,当然想楼上的放到数据库中,也行!
一般占位符都是动态的信息,而这些动态的信息都是根据当时Id在数据库里面获取的,所以需要业务代码去控制。。除非你是基于模型的开发,一开始就有每个表的模型,然后支持配置映射到你的占位符上
至少我是,简单易用。效率,真不是问题。模板一般存储在数据库中,随时可修改。
应该用模板引擎 - nvelocity, razor 等等,不要用 string replace, 你如果想增加一些要替换的占位符怎么办?
增加占位符跟razor一样的啊,只是在razor是增加@变量,而普通的Html是增加占位符标记。
@dotnetgeek: 你指的一样只是在模板中做的改动差不多。 然而做替换时你不可能事先知道模板中所有可能出现的占位符。 只要模板中添加了新的占位符, 你就要改动代码支持它们了。使用引擎就可以不需要改动代码了。
模板存在一个文件中或者数据库中从外部加载。
如果你想灵活,可以增加占位符规则,比如<>包含的都是占位符,然后再在数据库里面建立一个占位符替换规则,这样增加占位符你也不用改程序了。