日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
實(shí)現(xiàn)B2B平臺(tái)發(fā)送郵件動(dòng)態(tài)內(nèi)容的幾種思路

發(fā)送郵件動(dòng)態(tài)內(nèi)容是B2B平臺(tái)的重要功能,起到與用戶(hù)溝通,訂單的處理等功能。通過(guò)HTML發(fā)送郵件動(dòng)態(tài)內(nèi)容是本文的重要部分。

需求:

一個(gè)B2B系統(tǒng)在注冊(cè)用戶(hù)申請(qǐng)買(mǎi)家,申請(qǐng)審批通過(guò),訂單創(chuàng)建,申批通過(guò)時(shí)都需要發(fā)送郵件,郵件內(nèi)容需要包括一些比較正規(guī)的格式,而且其中會(huì)包含用戶(hù)信息,訂單信息這些動(dòng)態(tài)內(nèi)容。另外郵件內(nèi)容以后可能會(huì)頻繁調(diào)整,需要有比較靈活的定制化。

實(shí)現(xiàn):

了解過(guò)這個(gè)需求后,大概想到了或找到了幾種實(shí)現(xiàn):

1.通過(guò)代碼構(gòu)造郵件內(nèi)容,對(duì)于其中的動(dòng)態(tài)的內(nèi)容,直接拼湊。優(yōu)點(diǎn)是最直接,不會(huì)涉及其它的技術(shù)思考。缺點(diǎn)是需要繁瑣的拼接代碼,不容易直接看到顯示效果,不方便發(fā)現(xiàn)問(wèn)題,對(duì)后不調(diào)整的話不容易修改。

2.和上面的方法類(lèi)似,但是一個(gè)文件中只指定好固定的格式,把變化的部分用特定的字符代替,由程序讀取這個(gè)”模板“文件內(nèi)容,用具體內(nèi)容替換模板文件中的指定字符即可。優(yōu)點(diǎn)是實(shí)現(xiàn)比較簡(jiǎn)單,固定的部分比較容易控制和修改,但是動(dòng)態(tài)讀取的內(nèi)容部分比較難以實(shí)現(xiàn)和維護(hù)。由于郵件中的內(nèi)容并不是簡(jiǎn)單的幾個(gè)字符,而是說(shuō)整個(gè)訂單信息,這其中包括單頭和單身列表,而且其中會(huì)有比較特殊的格式顯示控制。 所以使用這個(gè)方法也不合適。

相關(guān)連接:http://www.c-sharpcorner.com/UploadFile/dsdaf/sendEmailTemplate09292006221150PM/sendEmailTemplate.aspx

3.使用頁(yè)面來(lái)表示需要發(fā)送的郵件內(nèi)容,然后請(qǐng)求這個(gè)頁(yè)面生成的Html直接作為發(fā)送內(nèi)容。在這里可以使用用戶(hù)控件代替普通的APSX文件,在用戶(hù)控件的前臺(tái),我們直接象顯示頁(yè)面內(nèi)容那樣來(lái)顯示我們的郵件內(nèi)容:

MailTemplate.ascx

  1.  
  2.         cellpadding="2" width="80%">
  3.         
  4.             
  5.                 
  6.                 
  7.                 
  8.             
  9.             
  10.                 
  11.                 
  12.             
  13.             
  14.                 
  15.             
  16.             
  17.                 
  18.             
  19.          
  20.            
  21.             
  22.             
  23.             
  24.             
  25.         
  26.             
  27.                 
  28.             
  29.         
  30.     
  31.                     訂單號(hào): <%=Order.OrderNo%>
  32.                 
  33.                     客戶(hù)編號(hào):<%=Order.CardCode%>
  34.                 
  35.                     下單日期:<%=Order.CreateDate%>
  36.                 
  37.                     運(yùn)費(fèi):<%=Order.Freight%>
  38.                 
  39.                     交易幣種:<%=Order.Currency%>
  40.                 
  41.                 
  42.                 
  43.                      
  44.                 
  45.                     送貨地址:<%=Order.ShipAddress%>
  46.                 
  47.             具體的交貨時(shí)將將由我們的客服人員與您聯(lián)系協(xié)商 
  48.             
  49.                     
  50.                     
  51.                         align="center">
  52.                         
  53.                             
  54.                                 
  55.                                 
  56.                                 
  57.                                 
  58.                             
  59.                           
  60.                             <% foreach (SendMailTemplate.OrderItem item in Order.OrderItems)
  61.                                 { %>
  62.                             
  63.                                 
  64.                                 
  65.                                 
  66.                                 
  67.                                 
  68.                             
  69.                           <%} %>
  70.                         
  71.                     
  72.                                     產(chǎn)品編號(hào)
  73.                                 
  74.                                     單位
  75.                                 
  76.                                     數(shù)量
  77.                                 
  78.                                     單價(jià)
  79.                                 
  80.                                      <%=item.ItemCode%>
  81.                                 
  82.                                         <%=item.Unit%>
  83.                                 
  84.                                         <%=item.Quantity%>
  85.                                 
  86.                                        <%=item.BasicPrice%>
  87.                                 
  88.               
  89.                 

這里只列出來(lái)代碼的一個(gè)片段,郵件還包括其它的一些固定的內(nèi)容,詳細(xì)的請(qǐng)直接下載源代碼查看,其中包括實(shí)體類(lèi)的代碼這里也就不再列出來(lái)了。在用戶(hù)控件的后臺(tái),我們只需要添加一個(gè)公開(kāi)的屬性: 

    

1:  public Order Order
2:        {
3:            get;
4:            set;
5:        }

然后我們需要?jiǎng)討B(tài)加載這個(gè)用戶(hù)控件,指定屬性,再輸出成Html屬性即可:  

 1:  Order order = Tools.CreateOrder();
 2:  Control mailTemplate = LoadControl("MailTemplate.ascx");
 3:   
 4:  ((MailTemplate)mailTemplate).Order = order;
 5:  StringBuilder stringBuilder = new StringBuilder();
 6:  StringWriter stringWriter = new StringWriter(stringBuilder);
 7:  HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
 8:  mailTemplate.RenderControl(htmlTextWriter);
 9:  htmlTextWriter.Close();
10:   
11:  //發(fā)送郵件
12:  MailMessage mm = new MailMessage();
13:  mm.Subject = string.Format("您的訂單({0}) -- 訂單已經(jīng)確認(rèn)", order.OrderNo);
14:  mm.IsBodyHtml = true;
15:  mm.To.Add("lonely_7345@hotmail.com");
16:  mm.Body = stringBuilder.ToString();
17:  Tools.SendEmail(mm);

在這里我們也省略發(fā)郵件的代碼,運(yùn)行,查看一下收到的郵件,OK.
 

使用這種方法應(yīng)該是比較快捷的,相對(duì)于以上來(lái)說(shuō)靈活了不少,格式容易控制,以后修改起來(lái)也比較方便。不過(guò)就是模板文件和代碼文件混在一起。

4.使用模板引擎,比如Nvelocity,StringTemplate。因?yàn)橹敖佑|過(guò)Nvelocity,所以嘗試了使用Nvelocity,具體有關(guān)的配置可以參照這個(gè)文章  http://www.cnblogs.com/McJeremy/archive/2008/06/25/1229848.html

Nvelocity的模板文件和上面我們的方法也是相當(dāng)類(lèi)似的。
 

 1:  
 3:   cellpadding="2" width="80%">
 4:   
 5:   
 6:   
 9:   
12:   
15:   
16:   
17:   
20:   
23:   
26:   
27:   
28:   
31:   
32:   
33:   
36:   
37: 
38: 
39:   
40:   
43:   
44:   
45: 
46:   
47:   
87:   
88:   
89:  
 7:   訂單號(hào):$order.OrderNo
 8:              
10:   客戶(hù)編號(hào):$order.CardCode
11:              
13:   下單日期:$order.CreateDate
14:              
18:   運(yùn)費(fèi):$order.Freight
19:              
21:   交易幣種:$order.Currency
22:              
24: 
25:   
29:    
30:   
34:   送貨地址:$order.ShipAddress
35:              
41:   具體的交貨時(shí)將將由我們的客服人員與您聯(lián)系協(xié)商 
42:   
48:   
49:   
50:   align="center">
51:   
52:   
53:   
56:   
59:   
62:   
65:   
66:   #foreach( $item in $order.OrderItems)
67:                          
68:   
71:   
74:   
77:   
80: 
81:   
82:   #end
83:                      
84:   
54:   產(chǎn)品編號(hào)
55:   
57:   單位
58:   
60:   數(shù)量
61:   
63:   單價(jià)
64:   
69:   ${item.ItemCode}
70:                              
72:   ${item.Unit}
73:                              
75:   ${item.Quantity}
76:                              
78:   ${item.BasicPrice}
79:                              
85: 
86:   

不同的是,我們的模板文件是單獨(dú)的一個(gè)文件,而我們只需要加載這個(gè)模板文件,指定參數(shù)就可以了。

 1:  public static VelocityEngine InitVelocity()
 2:        {
 3:            //創(chuàng)建NVelocity引擎的實(shí)例對(duì)象
 4:   VelocityEngine velocity = new VelocityEngine();
 5:            //初始化該實(shí)例對(duì)象
 6:   ExtendedProperties props = new ExtendedProperties();
 7:            props.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");
 8:            props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.HttpContext.Current.Server.MapPath("\\mailTemplate"));
 9:            props.AddProperty(RuntimeConstants.INPUT_ENCODING, "gb2312");
10:            props.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "gb2312");
11:            velocity.Init(props);
12:            return velocity;
13:        }
14:   
15:        private void SendOrderConfirmdEmail()
16:        {
17:            VelocityEngine velocity = InitVelocity();
18:            //從文件中讀取模板
19:   Template temp = velocity.GetTemplate("CreateOrderMail.vm");
20:   
21:            Order order = Tools.CreateOrder();
22:            IContext context = new VelocityContext();
23:            context.Put("order", order);
24:            //合并模板
25:   StringWriter writer = new StringWriter();
26:            temp.Merge(context, writer);
27:   
28:            //發(fā)送郵件
29:   MailMessage mm = new MailMessage();
30:            mm.Subject = string.Format("您的訂單({0}) -- 訂單已經(jīng)確認(rèn)", order.OrderNo);
31:            mm.IsBodyHtml = true;
32:            mm.To.Add("lonely_7345@hotmail.com");
33:            mm.Body = writer.GetStringBuilder().ToString();
34:            Tools.SendEmail(mm);
35:        }

在這里需要注意的是上面的第8行,這里需要加載的是你的模板文件所在父級(jí)物理路徑,我把模板文件放在mailTemplate文件夾下面。運(yùn)行,我們可以看到結(jié)果和上面的是一樣一樣的。這個(gè)方法要求對(duì)這個(gè)模板引擎有些了解,其實(shí)還是沒(méi)有啥難度的。帶來(lái)了比較大的靈活性,模板文件可以創(chuàng)建一個(gè)功能模塊,允許用戶(hù)編輯修改,而不會(huì)造成編譯錯(cuò)誤。

5.使用通常的XML+Xsl的方式生成html,這也是很容易想到的一個(gè)方法。但是由于發(fā)送郵件的點(diǎn)實(shí)在太多,使用這種方法編寫(xiě)的難度比較大了,而且需要匹配每個(gè)屬性,不可取。

6.搜索了一下有沒(méi)有相關(guān)的開(kāi)源項(xiàng)目,只搜索到了一個(gè)Email Template Framework,是通過(guò)xml文件來(lái)配置發(fā)送的選項(xiàng)和郵件的內(nèi)容,但是看介紹覺(jué)得對(duì)于比較簡(jiǎn)單的格式應(yīng)該能夠?qū)崿F(xiàn),但是比較復(fù)制的夾雜著比較多的html的郵件內(nèi)容,有可能會(huì)遇到問(wèn)題,另外由于時(shí)間問(wèn)題,應(yīng)盡量少用比較少見(jiàn)的開(kāi)源項(xiàng)目,避免遇到不能解決的問(wèn)題。
參照:http://www.bitethebullet.co.uk/EmailTemplateFramework/tabid/58/Default.aspx

結(jié)論:

1.通往一個(gè)目的地的途徑真的很多,大概了解了以上幾種方法之后,最后還是決定使用nvelocity模板的方式來(lái)完成這個(gè)功能,完成幾個(gè)點(diǎn)的郵件發(fā)送只用了半個(gè)小時(shí)。當(dāng)然,應(yīng)該還有更多的方法,更簡(jiǎn)單的方法,如果您有不同的思路和想法,請(qǐng)?jiān)谠u(píng)論中分享.

2.往往在研究某個(gè)技術(shù)的本身,有時(shí)會(huì)在遇到具體的功能問(wèn)題時(shí),反而不會(huì)把技術(shù)和實(shí)現(xiàn)聯(lián)系起來(lái)。而只有聯(lián)系起來(lái)才能夠使技術(shù)產(chǎn)生實(shí)用價(jià)值。


新聞標(biāo)題:實(shí)現(xiàn)B2B平臺(tái)發(fā)送郵件動(dòng)態(tài)內(nèi)容的幾種思路
網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/cocchco.html