首页 新闻 会员 周边

怎么实现动态模板,例如邮件和短信

0
悬赏园豆:200 [已解决问题] 解决于 2016-04-26 19:38

首先,我百度了模板引擎,研究了下NVelocity,

但是还是没有什么好的思路解决实际问题

 

实际问题是这样的

比如说短信

尊敬的xx 先生/女士:

     您在xx 时间,xx 地点,消费了 xx 人名币/美元/等等币种, 出库单号为:xx

网上订单号为xx,将有 xx (韵达) 承运, 等等

 

这样一个短信里,就包含了姓名,消费时间,消费地点,消费币种,出库单号,网上订单号,承运商,运单号等字段,而模板里也许今天是这样的,明天客户就想改成只有出库单号,网上订单号这两个字段内容的短信,动态的数据源和动态的模板内容,如何做呢?

还有邮件,邮件就更头痛了,要在一封邮件里包含支付信息,订单详情,等等查询结果,跟上面一样,显示的内容和获取的数据源都会发生改变,这样的模板功能,应该如何设计或者从哪方面做手做呢?如果用NVelocity来做的话。

 

求各位大神指点了

 

问题补充:

首先是根据我搜索的模板引擎,是可以把内容通过替换进行动态,

现在的问题是字段也要求动态化,

比如说第一次是要求收货人,收货地址,承运商的话

第二次就要增加收货人电话,承运商联系电话两个字段,这跟数据源就有关系了。也是纠结

澜紫癜青的主页 澜紫癜青 | 菜鸟二级 | 园豆:313
提问于:2016-04-14 00:02
< >
分享
最佳答案
0

被编程大叔说中了

我研究了NVelocity

NVelocity里,支持后台调用方法,也支持整个动态调用,后面有空了,会将此次解决内容,写个blog

当然也找到了雷同NVelocity解决方案,并且开源的,如FluentEmail

var template = "Dear @Model.Name, You are totally @Model.Compliment.";

var email = Email
    .From("bob@hotmail.com")
    .To("somedude@gmail.com")
    .Subject("woo nuget")
    .UsingTemplate(template, new { Name = "Luke", Compliment = "Awesome" });

 

 

 

澜紫癜青 | 菜鸟二级 |园豆:313 | 2016-04-26 19:35

你好啊,请问这个blog写了吗,目前我也遇到类似的问题。

YiiCheng | 园豆:200 (初学一级) | 2019-11-13 16:33

@YiiCheng: FluentEmail 你看下他的开源的wiki就有解答

澜紫癜青 | 园豆:313 (菜鸟二级) | 2019-11-25 16:29

@澜紫癜青:好的,谢谢你

YiiCheng | 园豆:200 (初学一级) | 2019-11-25 17:40
其他回答(8)
0

你可以通过XML来配置模板,读取数据后并填充到XML中的节点上即可

收获园豆:10
Jeffcky | 园豆:2789 (老鸟四级) | 2016-04-14 01:38
0

你需要解决两个问题,第一个,如何把模板变成最终内容,就像楼上所说,比如已经做好的XML模板,读取后把相应的占位符给替换了;第二个,动态模板,你得有个模板编辑的功能给用户,提供两个样本,邮件和短信,用户编辑完成后就保存起来,然后执行第一个的解决方案。

收获园豆:10
happydaily | 园豆:301 (菜鸟二级) | 2016-04-14 08:11
0

Razor引擎解析html就是模板。你可以把Razor拿来用。如果你的模板简单,那就直接使用特定占位符,然后用真实数据来replace。

收获园豆:10
幻天芒 | 园豆:37175 (高人七级) | 2016-04-14 08:40

 首先,模板是你已知的,所以数据源你自己需要对应好。

如果你的模板是用户来维护的,那你要写明,如果使用占位符,支持哪些占位符(也就是你可以提供哪些数据)

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-04-14 23:53
0

找一个模板引擎 然后再做 我这里推荐

RazorEngine

 

 

收获园豆:10
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-04-14 09:24
0

顶楼上.你需要Razor引擎.在github里.特别好用.

收获园豆:10
吴瑞祥 | 园豆:29449 (高人七级) | 2016-04-14 09:56
0

你可以建一个邮件或者短信模板数据库表 ,然后再后台编写好各种模板,比如注册通知模板,通知订单模板模板的内容可以写成固定动态的比如

尊敬的${userName}先生/女士:

     您在${newTime}时间,${}地点,消费了 ${}人名币/美元/等等币种, 出库单号为:${}

网上订单号为${},将有 ${}(韵达) 承运, 等等

 

通过调用这个模板时把对应的动态数据传过去,

String content = MailUtils.getMailText(map, sysMailTemplate.getContent());//这里面传的参map为动态用户数据,sysMailTemplate为模板内容

 

//通过模板构造邮件内容,将模板中的变量替换成map中的值,注:模板中的变量与map中的key保持一致。       
    public static String getMailText(Map<String, Object> map, String htmlTemplate) {
        String htmlText = htmlTemplate;
        //遍历Map中的所有Key,将得到的value值替换模板字符串中的变量值
        Set<String> keys = map.keySet();
        for (Iterator<String> it = keys.iterator(); it.hasNext();) {
            String key = it.next();
            htmlText = htmlText.replace("${" + key + "}", (String) map.get(key));
        }
        return htmlText;
    }

类似这种办法就可以动态显示邮件的内容,然后获取到内容发邮件或者短信。

收获园豆:100
孤王就是朕 | 园豆:248 (菜鸟二级) | 2016-04-14 10:50

谢谢回答,主要是现在内容和字段都是动态的,并非是简单的字段替换可以解决

支持(0) 反对(0) 澜紫癜青 | 园豆:313 (菜鸟二级) | 2016-04-14 11:51
0

题主不是不知道怎么编程,只是脑袋一下没转过弯来。

自己慢慢想想就能相通了。你都已经知道"模板引擎"。

收获园豆:45
爱编程的大叔 | 园豆:30839 (高人七级) | 2016-04-14 15:02
0

呵呵,说白了还是字符串拼装、替换。。

收获园豆:5
Ropean | 园豆:121 (初学一级) | 2016-04-24 19:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册