首页 新闻 会员 周边

【邮件内容】发送邮件的时候,你们都是用Replace替换掉预先写好的占位符吗??

0
悬赏园豆:20 [待解决问题]

通常的做法是在预先邮件模板里,约定好邮件内容的占位符,直到发送的时候,程序使用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的主页 dotnetgeek | 菜鸟二级 | 园豆:482
提问于:2013-11-04 17:34
< >
分享
所有回答(6)
0

一般应该会把占位符放到数据库,然后程序只是遍历查询出来的占位符进行替换,所以是不需要更改程序代码的

诶碧司 | 园豆:1912 (小虾三级) | 2013-11-04 18:13

模版也要放占位符啊

支持(0) 反对(0) dotnetgeek | 园豆:482 (菜鸟二级) | 2013-11-04 19:47

@dotnetgeek: 嗯,改模板是必须的。在我看来,模板并不是写死在程序中的,而是通过其他方式加载,也就不会导致每次更改模板的时候都得去更新程序

支持(0) 反对(0) 诶碧司 | 园豆:1912 (小虾三级) | 2013-11-05 09:04
0

string.Replace()方法,不用是c#写的,效率应该还是可以的,不信的话,可以Reflector查看,会发现最终是外部方法的,所以你考虑性能的话,就不需要了,当然想楼上的放到数据库中,也行!

秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-04 19:04
0

一般占位符都是动态的信息,而这些动态的信息都是根据当时Id在数据库里面获取的,所以需要业务代码去控制。。除非你是基于模型的开发,一开始就有每个表的模型,然后支持配置映射到你的占位符上

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-11-04 21:50
0

至少我是,简单易用。效率,真不是问题。模板一般存储在数据库中,随时可修改。

幻天芒 | 园豆:37175 (高人七级) | 2013-11-04 22:38
0

应该用模板引擎 - nvelocity, razor 等等,不要用 string replace, 你如果想增加一些要替换的占位符怎么办?

gunsmoke | 园豆:3592 (老鸟四级) | 2013-11-06 09:39

增加占位符跟razor一样的啊,只是在razor是增加@变量,而普通的Html是增加占位符标记。

支持(0) 反对(0) dotnetgeek | 园豆:482 (菜鸟二级) | 2013-11-06 13:44

@dotnetgeek: 你指的一样只是在模板中做的改动差不多。 然而做替换时你不可能事先知道模板中所有可能出现的占位符。 只要模板中添加了新的占位符, 你就要改动代码支持它们了。使用引擎就可以不需要改动代码了。

支持(0) 反对(0) gunsmoke | 园豆:3592 (老鸟四级) | 2013-11-07 04:46
0

模板存在一个文件中或者数据库中从外部加载。

如果你想灵活,可以增加占位符规则,比如<>包含的都是占位符,然后再在数据库里面建立一个占位符替换规则,这样增加占位符你也不用改程序了。

ocean | 园豆:824 (小虾三级) | 2013-11-07 22:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册