快速业务通道

Discuz!NT邮件插件机制分析

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11
; }
25                }
26            }
27        }
28    }
29   
30
31
         实现的代码比较简单,这面就不多说什么了。          上面只是解决了显示插件列表的问题,而如果将用户选取的插件信息进行保存以备使用的
的代码请看CS文件中的这部分代码:    1private void SaveEmailInfo_Click(object sender, EventArgs e)
 2{
 3   
 4    try
 5    {
 6         __emailinfo.PluginNameSpace = smtpemail.SelectedValue.Split('','')[0];
 7         __emailinfo.DllFileName = smtpemail.SelectedValue.Split('','')[1];
 8    }
 9    catch
10    {
11       ;
12    }
13
14    EmailConfigs.SaveConfig(__emailinfo); //序列化保存相关信息
15    Emails.ReSetISmtpMail();
16}
17
18
         这样就通过了“序列化”的方式保存了用户定制的信息,这个信息有邮件程序的名空间
和所在的DLL信息。这些信息最后都放在了config/email.config中。         目前设置方面已经万事俱备,就看前台如果调用了。为了方便起见,我们定制了一个类
用于发送不同邮件内容信息,它位于(Discuz.Forum项目下的Emails.cs文件),其中的静态
构造函数声明如下:
   1static  Emails()
 2{
 3
 4   try
 5   {
 6 //读取相应的DLL信息
 7 Assembly asm = Assembly.LoadFrom(HttpRuntime.BinDirectory+emailinfo.DllFileName+".dll");
 8 ESM  = (ISmtpMail)  Activator.CreateInstance(asm.GetType(emailinfo.PluginNameSpace));
 9   }
10   catch
11   {
12       
13 catch
14 {
15    if(emailinfo!=null)
16    {
17  //如果没有有效的设置则使用系统指定的邮件发送类代码
18  if(emailinfo.PluginNameSpace!=null && emailinfo.PluginNameSpace.IndexOf("SmtpMail")>0)
19  {
20           ESM  = new SmtpMail();
21  }
22  else
23  {
24     ESM  = new SysMailMessage();
25  }
26 
27           }
28
29
30
         其中了ESM就是接口实例protected static ISmtpMail ESM;
         这样就通过加载指定的DLL得到了要使用的类实例,而如下使用它大家只要看一上这个CS文件
的其余代码就会一清二楚了:)          可能有些朋友会问这样一个问题, 为什么要用DLL而不是直接用下

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号