大约还是去年12月份,当时项目中遇到了一个很棘手的问题,就是管理员(或站长)在后台设置
了邮箱信息之后,使用注册邮件发送激活验证码时,总有用户反映不能收到激活信息的邮件。
虽然不能收到邮件的情况有很多,甚至我已通过这个邮件发送程序测试过国内大多数知名网站的
邮箱(如126,sina ,sohu ,gmail等),但还是有站长或用户隔三差五反映这个问题。甚至到今天我
偶尔还会得到技术支持部门有关这方面问题的报怨。因此,今天这篇文章虽然说到了一个有关这个问
题的解决方案(但不完善),但还是希望园子里以前处理过这方面问题或有成功经验的朋友指点一二。
好了,不费话了,开始今天的话题。
相信下载到了我们发布的DLL并已Reflector相关程序结构的朋友,如果您留心看一下解决方案中的
Discuz.PlugIn项目并在VS下打开就会看到ISmtpMail.cs,SmtpEmailAttribute.cs,SmtpMail.cs,以
及SysMailMessage.cs这几个CS文件。现在简单说明一下:
ISmtpMail.cs,定义了邮件收发类代码要实现的接口,主要的属性如下:
1public interface ISmtpMail
2{
3
4 int MailDomainPort { set;}
5
6 string From { set;get;}
7
8 string FromName { set;get;}
9
10 bool Html { set;get;}
11
12 string Subject { set;get;}
13
14 string Body { set;get;}
15
16 string MailDomain { set;}
17
18 bool Send();
19
20
21
而SmtpMail,SysMailMessage这两个文件就是实现了这个接口的具体邮件发送类。
因为今天只讲插件机制分析,所以就不在这里说这两个类中具体的实现方式了。下面将要说的是
这两个类中使用的"用户定制属性",这里以SysMailMessage类为例:
1 [SmtpEmail(".net邮件发送程序", Version = "1.0", Author = "Discuz!NT ",
2 DllFileName = "Discuz.PlugIn.dll")]
3 public class SysMailMessage : ISmtpMail
4 {
5 private string _subject;
6 private string _body;
7 private string _from;
大家看到了在这个类上的SmtpEmail属性了吧,它就是下面要说明的"用户定制属性"的绑定应用。
而SmtpEmail请看如下代码(相关说明见注释):
如果您以前使用过采取属性绑定方式来标识和加载程序(或插件)的话,那么这时
您就会很清楚一会要使用的一些调用方法了。但我相信还会有一些朋友对这方面不是很熟
悉,所以我只能继续“贫”下去,希望您能耐着性子所我讲完:)
有了这几个文件之后,如何调用和设置要使用的是SysMailMessage还是SmtpMail中的
邮件发送功能呢,其实这个选择的问题我们留给了用户,因为插件是对那些使用它们的人
来说才是有意义的,而使用什么插件以及使用的方式都是用户喜好。因此我们在后台提供
了如下的界面来让用户进行相关的设置(图如下):
|